diff --git a/CHANGELOG.md b/CHANGELOG.md index 19fe370..1f28701 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [1.6.0] - 2026-10-04 + +### Changed + +- Sync the bundled OpenAPI spec and regenerate the types. Existing responses gain properties, among them `attachments` on `AgentRunResponse` and `AgentRunStepResponse`, `trace_purged_at` on a run, `warnings` on a step, `strip_quoted_reply_chains` on memory banks, `effort` on playground experiments, `effort_options` and `chat_capable` on `PromptModelResponse`, and `embedder_warning` on `ContentFileUploadResponse` +- Move `SeclaiApiVersion.Latest` to `2026-10-03`. Nothing is sent unless `apiVersion` is set, so a client that passes `SeclaiApiVersion.Latest` now opts into the five versions added below +- Send an array passed in the `query` of `request()` or `requestRaw()` as a repeated parameter, one pair per element. It was joined with commas into a single value + +### Added + +- Add the cloud-drive methods `listCloudDriveProviders()`, `listCloudDrives()`, `getCloudDrive()`, `updateCloudDrive()`, `disconnectCloudDrive()`, `deleteCloudDrive()`, `getAgentsUsingCloudDrive()` and `listCloudDriveRejections()`. The four listings return the items as an array whether the endpoint answers with a bare array or, from `apiVersion` `2026-07-27`, the `{data, pagination}` envelope +- Add `listSourceContents()` and `getSourceContentStatus()` for the indexing status of a source's content. `contentVersionIds` polls a batch of uploads in one request, and an empty array returns an empty page without calling the API +- Add `listEmbeddingModels()` and `listRerankerModels()`. The list is under `models` on every API version, with the defaults and pricing beside it +- Add the `SeclaiApiVersion` constants `V2026_08_03`, `V2026_08_21`, `V2026_09_28`, `V2026_09_30` and `V2026_10_03`, so those versions are accepted as `apiVersion`. The README lists what each one changes +- Add the type exports for those endpoints, including `CloudDriveResponse`, `CloudDriveProviderResponse`, `CloudDriveRejectionResponse`, `CloudDriveUpdateRequest`, `AgentUsingCloudDriveResponse`, `SourceContentStatusResponse`, `SourceContentStatusListResponse`, `ListSourceContentsOptions`, `EmbeddingModelListResponse` and `RerankerModelListResponse`, plus `AgentRunFileResponse` and `EffortOptionsResponse` + +### Fixed + +- Make `paginate()` work with the list methods. It read `items` and `pagination.total_pages`, while they return `data` and `pagination.pages`, so `client.paginate((opts) => client.listSources(opts))` threw `TypeError: result.items is not iterable`. It now reads the `{data, pagination}` envelope and stops on `has_next`, walks the flat `{data, total, page, limit}` shape of the evaluation listings by `total`, yields a bare array once, still accepts a custom fetcher's `{items, pagination: {total_pages}}`, and throws `SeclaiError` on anything else. The fetcher's page type is exported as `PaginatedPage` +- Correct the `Seclai` class example, which destructured an `items` property `listAgents()` does not return + ## [1.5.0] - 2026-07-27 ### Changed @@ -185,6 +206,7 @@ _Stable release. No functional changes since 0.0.1._ _Initial release._ +[1.6.0]: https://github.com/seclai/seclai-javascript/releases/tag/1.6.0 [1.5.0]: https://github.com/seclai/seclai-javascript/releases/tag/1.5.0 [1.4.0]: https://github.com/seclai/seclai-javascript/releases/tag/1.4.0 [1.3.0]: https://github.com/seclai/seclai-javascript/releases/tag/1.3.0 diff --git a/README.md b/README.md index fcc8413..39d8f21 100644 --- a/README.md +++ b/README.md @@ -127,8 +127,8 @@ Leave `apiVersion` unset and the header is omitted, so the account's pinned baseline applies and responses keep their current shapes. Upgrading this package alone never changes the wire contract. -Known versions are on `SeclaiApiVersion` (`V2026_07_01`, `V2026_07_27`, plus -`Default` and `Latest`), imported from `@seclai/sdk`. A version this release was +Known versions are on `SeclaiApiVersion` (`V2026_07_01` through `V2026_10_03`, +plus `Default` and `Latest`), imported from `@seclai/sdk`. A version this release was **not** built against throws at construction: a newer version can reshape responses, and this client would decode them incorrectly rather than reject them. Upgrade the package to adopt a new version, or set `allowUnknownApiVersion` if @@ -156,6 +156,23 @@ last two with `res.data ?? res.configs` / `res.data ?? res.alerts`. The legacy keys will be deprecated and then removed once the canonical envelope is the default. +The cloud-drive listings (`listCloudDriveProviders()`, `listCloudDrives()`, +`getAgentsUsingCloudDrive()`, `listCloudDriveRejections()`) follow the same rule +and return the items as an array on either shape. `listEmbeddingModels()` and +`listRerankerModels()` move their list from `models` to `data`; both methods +populate `models` on either shape, with the defaults and pricing beside it. + +**Later versions.** Each is cumulative, and none changes a response shape this +client decodes: + +| Version | What it changes | +| --- | --- | +| `2026-08-03` | `createMemoryBank()` rejects `max_age_days` with a 400, and an omitted `retention_days` resolves per bank type instead of to 30 | +| `2026-08-21` | `createSource()` rejects an embedding dimension its embedder does not support with a 400 — `listEmbeddingModels()` reports the supported ones | +| `2026-09-28` | Agent-definition writes use the current file-list grammar: an omitted `attachments` keeps the stored list and `[]` means no files | +| `2026-09-30` | A run's and a step's `output`, and a step's `input`, are the text rather than a JSON manifest; files are in `attachments` on every version | +| `2026-10-03` | A new LLM step written without `attachments` takes its parent's files, and a new retrieval step's matched media are its files | + ## Resources ### Identity @@ -427,6 +444,40 @@ await client.updateSource("source_id", { name: "Renamed" }); await client.deleteSource("source_id"); ``` +Indexing status of a source's content, keyed by the `content_version_id` the +upload methods return: + + +```ts +const failed = await client.listSourceContents("source_id", { status: "failed" }); +const batch = await client.listSourceContents("source_id", { + contentVersionIds: ["cv_1", "cv_2"], +}); +console.log(batch.pagination.total, failed.data.map((item) => item.error)); + +const one = await client.getSourceContentStatus("source_id", "cv_1"); +console.log(one.content_status); +``` + +### Cloud drives + + +```ts +const providers = await client.listCloudDriveProviders(); +const drives = await client.listCloudDrives(); +const drive = await client.getCloudDrive(drives[0].id); +await client.updateCloudDrive(drive.id, { name: "Contracts" }); + +// Which agents depend on it, and which files it skipped and why +const agents = await client.getAgentsUsingCloudDrive(drive.id); +const skipped = await client.listCloudDriveRejections(drive.id, { limit: 20 }); +console.log(providers.length, agents.length, skipped.map((r) => r.reason)); + +const disconnected = await client.disconnectCloudDrive(drive.id); // keeps the connection +console.log(disconnected.connected); +await client.deleteCloudDrive(drive.id); +``` + ### File uploads Upload a file to a source (max 200 MiB). The SDK infers MIME type from the file extension when `mimeType` is not provided. @@ -575,6 +626,11 @@ const model = await client.getModel("model_id"); // Media-generation quality tiers (fast/balanced/thorough) and what each resolves to const tiers = await client.getGenerationTiers(); +// Embedding and reranker models, with their pricing +const embedders = await client.listEmbeddingModels({ supportsInputMedia: "image" }); +const rerankers = await client.listRerankerModels(); +console.log(embedders.models, embedders.default_model_type, rerankers.models); + const alerts = await client.listModelAlerts(); await client.markModelAlertRead("alert_id"); await client.markAllModelAlertsRead(); @@ -674,8 +730,9 @@ await client.submitAiFeedback({ ... }); ## Pagination helper -Automatically iterate through all pages: +Automatically iterate through all pages of a list method: + ```ts for await (const source of client.paginate( (opts) => client.listSources(opts), diff --git a/openapi/seclai.openapi.json b/openapi/seclai.openapi.json index c497763..058d09e 100644 --- a/openapi/seclai.openapi.json +++ b/openapi/seclai.openapi.json @@ -373,7 +373,7 @@ "title": "Evaluation Criteria" }, "export_version": { - "description": "Schema version of the export format (currently \"2\").", + "description": "Schema version of the export format (currently \"5\").", "title": "Export Version", "type": "string" }, @@ -491,6 +491,60 @@ "title": "AgentRunAttemptResponse", "type": "object" }, + "AgentRunFileResponse": { + "description": "A file in a run's or a step's output.", + "properties": { + "bytes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Size of the file in bytes, when known.", + "title": "Bytes" + }, + "download_url": { + "description": "`GET` URL that streams the file; accepts an API key or OAuth token.", + "title": "Download Url", + "type": "string" + }, + "id": { + "description": "File identifier, used to download it.", + "format": "uuid", + "title": "Id", + "type": "string" + }, + "mime": { + "description": "MIME type of the file.", + "title": "Mime", + "type": "string" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The file's name in this run, as sent to email recipients and webhooks and matched by `{{attachments[...]}}` selectors.", + "title": "Name" + } + }, + "required": [ + "id", + "name", + "mime", + "bytes", + "download_url" + ], + "title": "AgentRunFileResponse", + "type": "object" + }, "AgentRunRequest": { "properties": { "input": { @@ -515,7 +569,7 @@ "type": "null" } ], - "description": "ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with the 'input' field. Use ``input_upload_ids`` to attach multiple files.\n\n**Attachment visibility:** a step only sees the upload when its template references the input \u2014 via ``{{input}}`` / ``{{agent.input}}`` / ``{{step..input|output}}`` (implicit, all attachments) or the ``{{attachments[\u2026]}}`` family (explicit narrowing \u2014 e.g. ``{{attachments[0]}}``, ``{{attachments[*.pdf]}}``).\n\n**Per-batch validation:** every selector the agent's definition declares must be satisfied or the run is rejected with HTTP 400. Exact-name selectors require that filename to be present; indexed selectors require at least N+1 files; glob patterns require at least one matching filename.", + "description": "ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with ``input_upload_ids`` \u2014 use that field to attach multiple files. May be combined with ``input``: the prompt text leads and the file's extracted text follows under a ``# {filename}`` heading.\n\n**Attachment visibility:** a step only sees the upload when its template references the input \u2014 via ``{{input}}`` / ``{{agent.input}}`` / ``{{step..input|output}}`` (implicit, all attachments) or the ``{{attachments[\u2026]}}`` family (explicit narrowing \u2014 e.g. ``{{attachments[0]}}``, ``{{attachments[*.pdf]}}``).\n\n**Per-batch validation:** every selector the agent's definition declares must be satisfied or the run is rejected with HTTP 400. Exact-name selectors require that filename to be present; indexed selectors require at least N+1 files; glob patterns require at least one matching filename.", "title": "Input Upload Id" }, "input_upload_ids": { @@ -532,7 +586,7 @@ "type": "null" } ], - "description": "IDs of multiple previously uploaded files. Each upload's extracted text is concatenated under a heading; each upload's binary is surfaced as a separate ``MediaAttachment`` so multi-modal prompt steps reason over all files at once. Steps narrow visibility via ``{{attachments[\u2026]}}`` selectors (by index, filename, or fnmatch glob). The batch must satisfy every selector the agent declares \u2014 exact names, indexed references (length must exceed the highest index), and glob patterns (each pattern needs at least one match). Mismatches return HTTP 400 with the unmet requirements listed. Mutually exclusive with ``input`` and ``input_upload_id`` \u2014 pass exactly one of the three. Max 20 uploads per run.", + "description": "IDs of multiple previously uploaded files. Each upload's extracted text is concatenated under a heading; each upload's binary is surfaced as a separate ``MediaAttachment`` so multi-modal prompt steps reason over all files at once. Steps narrow visibility via ``{{attachments[\u2026]}}`` selectors (by index, filename, or fnmatch glob). The batch must satisfy every selector the agent declares \u2014 exact names, indexed references (length must exceed the highest index), and glob patterns (each pattern needs at least one match). Mismatches return HTTP 400 with the unmet requirements listed. Mutually exclusive with ``input_upload_id`` (two spellings of the same batch), but may be combined with ``input`` \u2014 the prompt text leads and the per-file sections follow, so \"a photo plus a sentence about it\" needs no synthetic text upload. Max 20 uploads per run.", "title": "Input Upload Ids" }, "metadata": { @@ -575,6 +629,14 @@ }, "AgentRunResponse": { "properties": { + "attachments": { + "description": "Files in the run's output, in order. Empty for runs that produced none, for runs made before files were listed here, and once the run's trace is purged.", + "items": { + "$ref": "#/components/schemas/AgentRunFileResponse" + }, + "title": "Attachments", + "type": "array" + }, "attempts": { "description": "List of attempts made for this agent run.", "items": { @@ -600,7 +662,7 @@ "type": "null" } ], - "description": "Credits consumed by the agent run, if applicable.", + "description": "Credits consumed by the agent run, if applicable. Can still rise briefly after the run ends, while governance screening finishes.", "title": "Credits" }, "error_count": { @@ -685,7 +747,7 @@ "type": "null" } ], - "description": "Output produced by the agent run.", + "description": "The run's output text; its files are in `attachments`. Below `Seclai-Version: 2026-09-30` an output that has files is instead the manifest JSON `{schema, text, attachments: [{storage_key, mime, name, label, bytes}]}`; `bytes` is absent on runs made before that version shipped.", "title": "Output" }, "output_content_type": { @@ -697,7 +759,7 @@ "type": "null" } ], - "description": "MIME type of `output` \u2014 mirrors the terminal step's `output_content_type`. Consumers interpret `output` differently depending on this value: `application/vnd.seclai.manifest+json` is a multi-asset manifest with shape `{text, attachments: [{storage_key, mime, name, bytes}]}` \u2014 fetch each attachment via `GET /v2/agent-runs/{run_id}/attachments/{attachment_id}`, where `attachment_id` is the URL-safe base64 of the attachment's `storage_key` (accepts an API key or OAuth token). `text/plain` / `text/*` are free-form text. `application/json` is a JSON document. Null on runs that produced no terminal output or that pre-date this column.", + "description": "MIME type of `output` \u2014 mirrors the terminal step's `output_content_type`. `text/plain` / `text/*` are free-form text and `application/json` is a JSON document. Below `Seclai-Version: 2026-09-30` an output that has files reads `application/vnd.seclai.manifest+json` (see `output`); the same files are in `attachments` on every version, each with a `download_url`. Null on runs that produced no terminal output or that pre-date this column.", "title": "Output Content Type" }, "priority": { @@ -741,6 +803,19 @@ "description": "Step outputs and per-step timing/credits. Only included when requested.", "title": "Steps" }, + "trace_purged_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When this run's trace content was deleted under the account's agent-trace retention window. Non-null means `input`, `output` and every step's and tool call's I/O are null **by design** and will never be available again \u2014 the run aged out, it did not fail. Branch on this rather than on a null `output`: a run that genuinely produced nothing looks identical. Status, timing and credits remain accurate.", + "title": "Trace Purged At" + }, "wait_ms": { "anyOf": [ { @@ -774,8 +849,16 @@ "title": "Agent Step Id", "type": "string" }, + "attachments": { + "description": "Files in this step's output, in order. Empty for steps that produced none, for steps run before files were listed here, and once the run's trace is purged.", + "items": { + "$ref": "#/components/schemas/AgentRunFileResponse" + }, + "title": "Attachments", + "type": "array" + }, "credits_used": { - "description": "Credits consumed by the step attempt, if applicable.", + "description": "Credits consumed by this step across every attempt it made. Some charges made outside any step, such as governance screening of the run's input, count toward the run's total but no step's. The timestamps above and the tool calls below describe the latest attempt only.", "title": "Credits Used", "type": "number" }, @@ -812,7 +895,7 @@ "type": "null" } ], - "description": "Input provided to the step, if any.", + "description": "Input text provided to the step, if any. Below `Seclai-Version: 2026-09-30`, the manifest JSON when the step that produced it output files and is not a `for_each`.", "title": "Input" }, "output": { @@ -824,7 +907,7 @@ "type": "null" } ], - "description": "Output produced by the step, if any.", + "description": "Output text produced by the step, if any; its files are in `attachments`. Below `Seclai-Version: 2026-09-30`, the manifest JSON when the step output files and is not a `for_each`.", "title": "Output" }, "output_content_type": { @@ -867,6 +950,21 @@ }, "title": "Tool Calls", "type": "array" + }, + "warnings": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Authoring problems the step ran into, whether or not it then failed, such as a file name selector that matched none of its source's files.", + "title": "Warnings" } }, "required": [ @@ -908,7 +1006,7 @@ "type": "null" } ], - "description": "ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with the 'input' field. Use ``input_upload_ids`` to attach multiple files. Subject to the same per-batch attachment-selector validation as the non-streaming endpoint.", + "description": "ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with ``input_upload_ids`` \u2014 use that field to attach multiple files. May be combined with ``input``. Subject to the same per-batch attachment-selector validation as the non-streaming endpoint.", "title": "Input Upload Id" }, "input_upload_ids": { @@ -925,7 +1023,7 @@ "type": "null" } ], - "description": "IDs of multiple previously uploaded files. See the non-streaming endpoint for full semantics, including per-batch selector validation (exact names, indexed references, and glob patterns must all be satisfied or the run is rejected with HTTP 400). Max 20.", + "description": "IDs of multiple previously uploaded files. See the non-streaming endpoint for full semantics, including per-batch selector validation (exact names, indexed references, and glob patterns must all be satisfied or the run is rejected with HTTP 400) and combining the batch with ``input`` prompt text. Max 20.", "title": "Input Upload Ids" }, "metadata": { @@ -1047,7 +1145,7 @@ }, "sequence": { "default": 0, - "description": "0-based ordinal of this call within its step run.", + "description": "0-based ordinal of this call within one attempt of the step, so it repeats across a retried step's attempts. This list holds the latest attempt only.", "title": "Sequence", "type": "integer" }, @@ -1383,6 +1481,47 @@ "title": "AgentTraceSearchResponse", "type": "object" }, + "AgentUsingCloudDriveResponseModel": { + "properties": { + "agent_id": { + "description": "Agent identifier.", + "title": "Agent Id", + "type": "string" + }, + "agent_name": { + "description": "Agent name.", + "title": "Agent Name", + "type": "string" + }, + "trigger_types": { + "description": "File-change trigger types bound to this drive.", + "items": { + "type": "string" + }, + "title": "Trigger Types", + "type": "array" + }, + "via_prompt_tool": { + "description": "Uses a prompt_call cloud-drive tool.", + "title": "Via Prompt Tool", + "type": "boolean" + }, + "via_step": { + "description": "Uses a list/read/write cloud-drive step.", + "title": "Via Step", + "type": "boolean" + } + }, + "required": [ + "agent_id", + "agent_name", + "via_step", + "via_prompt_tool", + "trigger_types" + ], + "title": "AgentUsingCloudDriveResponseModel", + "type": "object" + }, "AiAssistantAcceptResponse": { "description": "Response from accepting and executing a plan.", "properties": { @@ -2210,149 +2349,85 @@ "title": "ChangeStatusRequest", "type": "object" }, - "CompactionEvaluationModel": { - "description": "Structured LLM-as-judge evaluation result.", + "CloudDriveAccessLevelResponseModel": { "properties": { - "reasoning": { - "description": "Explanation of the evaluation.", - "title": "Reasoning", - "type": "string" - }, - "score": { - "description": "Quality score from 1 to 5.", - "title": "Score", - "type": "integer" + "default": { + "description": "Whether connecting without a choice uses it.", + "title": "Default", + "type": "boolean" }, - "verdict": { - "description": "'pass' or 'fail'.", - "title": "Verdict", + "description": { + "description": "What agents can do at this level.", + "title": "Description", "type": "string" - } - }, - "required": [ - "verdict", - "score", - "reasoning" - ], - "title": "CompactionEvaluationModel", - "type": "object" - }, - "CompactionScheduledResponse": { - "description": "Acknowledgement that an on-demand compaction run was scheduled.", - "properties": { - "memory_bank_id": { - "title": "Memory Bank Id", + }, + "key": { + "description": "Level identifier, e.g. `read_write`/`read_only`.", + "title": "Key", "type": "string" }, - "status": { - "title": "Status", + "label": { + "description": "Short human-readable name.", + "title": "Label", "type": "string" } }, "required": [ - "memory_bank_id", - "status" + "key", + "label", + "description", + "default" ], - "title": "CompactionScheduledResponse", + "title": "CloudDriveAccessLevelResponseModel", "type": "object" }, - "CompactionTestResponseModel": { - "description": "Response from a compaction prompt test.", + "CloudDriveProviderResponseModel": { "properties": { - "compaction_summary": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "The generated compaction summary.", - "title": "Compaction Summary" - }, - "evaluation": { - "$ref": "#/components/schemas/CompactionEvaluationModel", - "description": "LLM-as-judge quality evaluation." - }, - "generated": { - "description": "True when entries were LLM-generated rather than real.", - "title": "Generated", - "type": "boolean" - }, - "original_entries": { - "description": "Entries fed into the compactor.", + "access_levels": { + "description": "Mutually-exclusive permission bundles offered when connecting. Connecting happens in the app, so this is informational here \u2014 it explains what a connection's `access_level` can be.", "items": { - "type": "string" + "$ref": "#/components/schemas/CloudDriveAccessLevelResponseModel" }, - "title": "Original Entries", + "title": "Access Levels", "type": "array" }, - "surviving_entries": { - "description": "Entries that survived after compaction.", - "items": { - "type": "string" - }, - "title": "Surviving Entries", - "type": "array" - } - }, - "required": [ - "original_entries", - "compaction_summary", - "surviving_entries", - "evaluation", - "generated" - ], - "title": "CompactionTestResponseModel", - "type": "object" - }, - "CompatibleRunListResponse": { - "description": "Paginated list of compatible runs.", - "properties": { - "data": { + "display_name": { + "description": "Human-readable provider name.", + "title": "Display Name", + "type": "string" + }, + "key": { + "description": "Provider key used as `provider` on a connection.", + "title": "Key", + "type": "string" + }, + "scopes": { + "description": "OAuth permissions this provider can request.", "items": { - "$ref": "#/components/schemas/CompatibleRunResponse" + "$ref": "#/components/schemas/CloudDriveScopeResponseModel" }, - "title": "Data", + "title": "Scopes", "type": "array" - }, - "limit": { - "title": "Limit", - "type": "integer" - }, - "page": { - "title": "Page", - "type": "integer" - }, - "total": { - "title": "Total", - "type": "integer" } }, "required": [ - "data", - "total", - "page", - "limit" + "key", + "display_name", + "scopes", + "access_levels" ], - "title": "CompatibleRunListResponse", + "title": "CloudDriveProviderResponseModel", "type": "object" }, - "CompatibleRunResponse": { - "description": "A run that has a completed step matching a criteria's step_id.", + "CloudDriveRejectionResponseModel": { + "description": "One file the connection deliberately did not process.", "properties": { - "agent_run_id": { - "format": "uuid", - "title": "Agent Run Id", - "type": "string" - }, - "agent_step_run_id": { - "format": "uuid", - "title": "Agent Step Run Id", + "created_at": { + "description": "When the file was skipped.", + "title": "Created At", "type": "string" }, - "completed_at": { + "detail": { "anyOf": [ { "type": "string" @@ -2361,9 +2436,10 @@ "type": "null" } ], - "title": "Completed At" + "description": "Extra context, e.g. the cap that was hit.", + "title": "Detail" }, - "input_preview": { + "file_id": { "anyOf": [ { "type": "string" @@ -2372,9 +2448,10 @@ "type": "null" } ], - "title": "Input Preview" + "description": "The provider's file id, when the file was known.", + "title": "File Id" }, - "output_storage_key": { + "file_path": { "anyOf": [ { "type": "string" @@ -2383,9 +2460,32 @@ "type": "null" } ], - "title": "Output Storage Key" + "description": "Path of the skipped file, when known.", + "title": "File Path" }, - "run_status": { + "id": { + "description": "Rejection identifier.", + "title": "Id", + "type": "string" + }, + "reason": { + "description": "`too_large`, `download_failed`, or `flood`.", + "title": "Reason", + "type": "string" + } + }, + "required": [ + "id", + "reason", + "created_at" + ], + "title": "CloudDriveRejectionResponseModel", + "type": "object" + }, + "CloudDriveResponseModel": { + "description": "A cloud-drive connection, without any secret material.", + "properties": { + "access_level": { "anyOf": [ { "type": "string" @@ -2394,10 +2494,21 @@ "type": "null" } ], - "title": "Run Status" + "description": "The permission bundle the granted scopes correspond to \u2014 `read_write` or `read_only`. Null when the grant matches no level the provider currently offers; treat that as unknown rather than assuming write access.", + "title": "Access Level" }, - "started_at": { - "anyOf": [ + "connected": { + "description": "True when the connection is usable.", + "title": "Connected", + "type": "boolean" + }, + "created_at": { + "description": "When the connection was created.", + "title": "Created At", + "type": "string" + }, + "drive_id": { + "anyOf": [ { "type": "string" }, @@ -2405,68 +2516,10 @@ "type": "null" } ], - "title": "Started At" - } - }, - "required": [ - "agent_run_id", - "agent_step_run_id", - "completed_at", - "output_storage_key" - ], - "title": "CompatibleRunResponse", - "type": "object" - }, - "ContentEmbeddingResponse": { - "description": "Response model for content embedding.", - "properties": { - "batch_duration": { - "title": "Batch Duration", - "type": "number" - }, - "batch_size": { - "title": "Batch Size", - "type": "integer" - }, - "id": { - "title": "Id", - "type": "string" - }, - "text": { - "title": "Text", - "type": "string" - }, - "text_end": { - "title": "Text End", - "type": "integer" - }, - "text_start": { - "title": "Text Start", - "type": "integer" + "description": "Opaque id of the shared drive the folder resolves to, or null for the user's own drive. Stable across renames \u2014 compare on this rather than on the name in `folder_path`.", + "title": "Drive Id" }, - "vector": { - "items": { - "type": "number" - }, - "title": "Vector", - "type": "array" - } - }, - "required": [ - "id", - "text_start", - "text_end", - "text", - "vector", - "batch_size", - "batch_duration" - ], - "title": "ContentEmbeddingResponse", - "type": "object" - }, - "CreateAlertConfigRequest": { - "properties": { - "agent_id": { + "drive_name": { "anyOf": [ { "type": "string" @@ -2475,48 +2528,37 @@ "type": "null" } ], - "description": "Agent ID (for agent alerts)", - "title": "Agent Id" - }, - "alert_type": { - "description": "Alert type", - "title": "Alert Type", - "type": "string" - }, - "cooldown_minutes": { - "default": 60, - "description": "Cooldown period in minutes", - "title": "Cooldown Minutes", - "type": "integer" + "description": "Display name the shared drive last resolved to. Presentation only; never match on it.", + "title": "Drive Name" }, - "distribution_type": { - "default": "owner", - "description": "Distribution type (owner, owner_admins, selected_members)", - "title": "Distribution Type", - "type": "string" - }, - "enabled": { - "default": true, - "description": "Whether the alert config is enabled", - "title": "Enabled", + "drive_name_stale": { + "description": "True when `drive_name` could not be re-confirmed (the drive was deleted, access was lost, or the provider was unreachable). The last known name is still reported \u2014 treat it as possibly out of date rather than current.", + "title": "Drive Name Stale", "type": "boolean" }, - "recipient_user_ids": { + "external_account_id": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "description": "User IDs for selected_members distribution", - "title": "Recipient User Ids" + "description": "The provider's own opaque account identifier (never an email).", + "title": "External Account Id" }, - "source_connection_id": { + "folder_path": { + "description": "Watched folder; empty string means the drive root. A folder on a shared drive is written `/Shared drives//`.", + "title": "Folder Path", + "type": "string" + }, + "id": { + "description": "Connection identifier.", + "title": "Id", + "type": "string" + }, + "last_error": { "anyOf": [ { "type": "string" @@ -2525,33 +2567,22 @@ "type": "null" } ], - "description": "Source connection ID (for source alerts)", - "title": "Source Connection Id" + "description": "Most recent sync or authorization error, if any.", + "title": "Last Error" }, - "threshold": { + "last_synced_at": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Threshold configuration", - "title": "Threshold" - } - }, - "required": [ - "alert_type" - ], - "title": "CreateAlertConfigRequest", - "type": "object" - }, - "CreateEvaluationCriteriaRequest": { - "description": "Request body for creating an evaluation criteria.\n\nThe evaluation mode, retry settings, and sample frequency are set at the\nagent level, not per-criteria.", - "properties": { - "description": { + "description": "When the connection last synced successfully.", + "title": "Last Synced At" + }, + "name": { "anyOf": [ { "type": "string" @@ -2560,14 +2591,10 @@ "type": "null" } ], - "title": "Description" - }, - "enabled": { - "default": true, - "title": "Enabled", - "type": "boolean" + "description": "Human-readable name.", + "title": "Name" }, - "evaluation_prompt": { + "oauth_scopes": { "anyOf": [ { "type": "string" @@ -2576,126 +2603,138 @@ "type": "null" } ], - "title": "Evaluation Prompt" + "description": "Space-separated OAuth scopes granted to this connection.", + "title": "Oauth Scopes" }, - "evaluation_tier": { - "anyOf": [ - { - "$ref": "#/components/schemas/AgentEvaluationTier" - }, - { - "type": "null" - } - ] + "provider": { + "description": "Provider key, e.g. `dropbox` or `google_drive`.", + "title": "Provider", + "type": "string" }, - "expectation_config": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "title": "Expectation Config" + "realtime_updates": { + "description": "True when changes arrive via the provider's push notifications. False means the drive still syncs, but only on the scheduled backstop sweep rather than within seconds of a change.", + "title": "Realtime Updates", + "type": "boolean" }, - "pass_threshold": { - "default": 0.5, - "maximum": 1.0, - "minimum": 0.0, - "title": "Pass Threshold", - "type": "number" + "status": { + "description": "One of `active`, `pending_auth`, `error`, `disconnected`.", + "title": "Status", + "type": "string" }, - "step_id": { - "maxLength": 255, - "minLength": 1, - "title": "Step Id", + "updated_at": { + "description": "When the connection was last modified.", + "title": "Updated At", "type": "string" } }, "required": [ - "step_id" + "id", + "provider", + "status", + "folder_path", + "drive_name_stale", + "connected", + "realtime_updates", + "created_at", + "updated_at" ], - "title": "CreateEvaluationCriteriaRequest", + "title": "CloudDriveResponseModel", "type": "object" }, - "CreateEvaluationResultRequest": { - "description": "Request body for recording an evaluation result.", + "CloudDriveScopeResponseModel": { "properties": { - "agent_run_id": { - "format": "uuid", - "title": "Agent Run Id", + "description": { + "description": "What the scope allows.", + "title": "Description", "type": "string" }, - "agent_step_run_id": { - "anyOf": [ - { - "format": "uuid", - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Agent Step Run Id" + "key": { + "description": "The OAuth scope string sent to the provider.", + "title": "Key", + "type": "string" }, - "details": { + "label": { + "description": "Short human-readable name.", + "title": "Label", + "type": "string" + }, + "recommended": { + "description": "Whether this scope is requested by default on connect.", + "title": "Recommended", + "type": "boolean" + } + }, + "required": [ + "key", + "label", + "description", + "recommended" + ], + "title": "CloudDriveScopeResponseModel", + "type": "object" + }, + "CloudDriveUpdateRequest": { + "properties": { + "folder_path": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "title": "Details" - }, - "flagged": { - "default": false, - "title": "Flagged", - "type": "boolean" - }, - "retry_count": { - "default": 0, - "minimum": 0.0, - "title": "Retry Count", - "type": "integer" + "description": "New watched folder; empty means the whole drive. A folder on a shared drive is written `/Shared drives//`. Changing it resets the sync cursor, so files already in the new folder are NOT replayed as triggers \u2014 only subsequent changes fire, matching connect-time behaviour. Rejected when the new folder would make an agent that writes there re-trigger itself.", + "title": "Folder Path" }, - "retry_triggered": { - "default": false, - "title": "Retry Triggered", - "type": "boolean" - }, - "score": { + "name": { "anyOf": [ { - "maximum": 1.0, - "minimum": 0.0, - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Score" - }, - "status": { - "$ref": "#/components/schemas/EvaluationStatus" + "description": "New display name for the connection.", + "title": "Name" } }, - "required": [ - "agent_run_id", - "status" - ], - "title": "CreateEvaluationResultRequest", + "title": "CloudDriveUpdateRequest", "type": "object" }, - "CreateExperimentResponse": { + "CompactionEvaluationModel": { + "description": "Structured LLM-as-judge evaluation result.", "properties": { - "experiment_id": { - "title": "Experiment Id", + "reasoning": { + "description": "Explanation of the evaluation.", + "title": "Reasoning", + "type": "string" + }, + "score": { + "description": "Quality score from 1 to 5.", + "title": "Score", + "type": "integer" + }, + "verdict": { + "description": "'pass' or 'fail'.", + "title": "Verdict", + "type": "string" + } + }, + "required": [ + "verdict", + "score", + "reasoning" + ], + "title": "CompactionEvaluationModel", + "type": "object" + }, + "CompactionScheduledResponse": { + "description": "Acknowledgement that an on-demand compaction run was scheduled.", + "properties": { + "memory_bank_id": { + "title": "Memory Bank Id", "type": "string" }, "status": { @@ -2704,136 +2743,131 @@ } }, "required": [ - "experiment_id", + "memory_bank_id", "status" ], - "title": "CreateExperimentResponse", + "title": "CompactionScheduledResponse", "type": "object" }, - "CreateKnowledgeBaseBody": { - "description": "Request body for creating a knowledge base.", + "CompactionTestResponseModel": { + "description": "Response from a compaction prompt test.", "properties": { - "default_score_threshold": { - "anyOf": [ - { - "maximum": 1.0, - "minimum": 0.0, - "type": "number" - }, - { - "type": "null" - } - ], - "description": "Default minimum rerank score threshold.", - "title": "Default Score Threshold" - }, - "default_top_k": { - "anyOf": [ - { - "exclusiveMinimum": 0.0, - "maximum": 200.0, - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Default results after reranking.", - "title": "Default Top K" - }, - "default_top_n": { - "anyOf": [ - { - "exclusiveMinimum": 0.0, - "maximum": 200.0, - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Default number of results.", - "title": "Default Top N" - }, - "description": { + "compaction_summary": { "anyOf": [ { - "maxLength": 1000, "type": "string" }, { "type": "null" } ], - "description": "Optional description.", - "title": "Description" + "description": "The generated compaction summary.", + "title": "Compaction Summary" }, - "name": { - "description": "Knowledge base name.", - "maxLength": 255, - "minLength": 1, - "title": "Name", - "type": "string" + "evaluation": { + "$ref": "#/components/schemas/CompactionEvaluationModel", + "description": "LLM-as-judge quality evaluation." }, - "reranker_model": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Reranker model to use (null for no reranking).", - "title": "Reranker Model" + "generated": { + "description": "True when entries were LLM-generated rather than real.", + "title": "Generated", + "type": "boolean" }, - "source_ids": { - "description": "List of source connection IDs to link.", + "original_entries": { + "description": "Entries fed into the compactor.", "items": { "type": "string" }, - "minItems": 1, - "title": "Source Ids", + "title": "Original Entries", + "type": "array" + }, + "surviving_entries": { + "description": "Entries that survived after compaction.", + "items": { + "type": "string" + }, + "title": "Surviving Entries", "type": "array" } }, "required": [ - "name", - "source_ids" + "original_entries", + "compaction_summary", + "surviving_entries", + "evaluation", + "generated" ], - "title": "CreateKnowledgeBaseBody", + "title": "CompactionTestResponseModel", "type": "object" }, - "CreateMemoryBankBody": { - "description": "Request body for creating a memory bank.", + "CompatibleRunListResponse": { + "description": "Paginated list of compatible runs.", "properties": { - "chunk_overlap": { + "data": { + "items": { + "$ref": "#/components/schemas/CompatibleRunResponse" + }, + "title": "Data", + "type": "array" + }, + "limit": { + "title": "Limit", + "type": "integer" + }, + "page": { + "title": "Page", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "data", + "total", + "page", + "limit" + ], + "title": "CompatibleRunListResponse", + "type": "object" + }, + "CompatibleRunResponse": { + "description": "A run that has a completed step matching a criteria's step_id.", + "properties": { + "agent_run_id": { + "format": "uuid", + "title": "Agent Run Id", + "type": "string" + }, + "agent_step_run_id": { + "format": "uuid", + "title": "Agent Step Run Id", + "type": "string" + }, + "completed_at": { "anyOf": [ { - "minimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Chunk overlap (custom mode only).", - "title": "Chunk Overlap" + "title": "Completed At" }, - "chunk_size": { + "input_preview": { "anyOf": [ { - "exclusiveMinimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Chunk size (custom mode only).", - "title": "Chunk Size" + "title": "Input Preview" }, - "compaction_prompt": { + "output_storage_key": { "anyOf": [ { "type": "string" @@ -2842,36 +2876,56 @@ "type": "null" } ], - "description": "Custom prompt used when compacting older entries. When set, entries that exceed a threshold are summarized into a new entry before being soft-deleted.", - "title": "Compaction Prompt" + "title": "Output Storage Key" }, - "description": { + "run_status": { "anyOf": [ { - "maxLength": 1000, "type": "string" }, { "type": "null" } ], - "description": "Optional description of the bank's purpose.", - "title": "Description" + "title": "Run Status" }, - "dimensions": { + "started_at": { "anyOf": [ { - "exclusiveMinimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Embedding dimensions (custom mode only).", - "title": "Dimensions" + "title": "Started At" + } + }, + "required": [ + "agent_run_id", + "agent_step_run_id", + "completed_at", + "output_storage_key" + ], + "title": "CompatibleRunResponse", + "type": "object" + }, + "ContentEmbeddingResponse": { + "description": "Response model for content embedding.", + "properties": { + "batch_duration": { + "title": "Batch Duration", + "type": "number" }, - "embedding_model": { + "batch_size": { + "title": "Batch Size", + "type": "integer" + }, + "id": { + "title": "Id", + "type": "string" + }, + "media_name": { "anyOf": [ { "type": "string" @@ -2880,164 +2934,132 @@ "type": "null" } ], - "description": "Custom embedding model (custom mode only).", - "title": "Embedding Model" + "title": "Media Name" }, - "max_age_days": { + "page_number": { "anyOf": [ { - "exclusiveMinimum": 0.0, "type": "integer" }, { "type": "null" } ], - "description": "Max entry age in days before compaction. Checked inline after each write and by the hourly background sweep.", - "title": "Max Age Days" + "title": "Page Number" }, - "max_size_tokens": { + "source_mime": { "anyOf": [ { - "exclusiveMinimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Max total tokens (per partition) before compaction. Checked inline after each write and by the hourly background sweep.", - "title": "Max Size Tokens" + "title": "Source Mime" }, - "max_turns": { + "source_url": { "anyOf": [ { - "exclusiveMinimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Max conversation turns (per partition) before compaction. Checked inline after each write and by the hourly background sweep.", - "title": "Max Turns" + "title": "Source Url" }, - "mode": { - "default": "fast_and_cheap", - "description": "Embedding quality / cost trade-off. One of: fast_and_cheap, balanced, slow_and_thorough, custom.", - "title": "Mode", - "type": "string" - }, - "name": { - "description": "Memory bank name.", - "maxLength": 255, - "minLength": 1, - "title": "Name", + "text": { + "title": "Text", "type": "string" }, - "retention_days": { - "anyOf": [ - { - "exclusiveMinimum": 0.0, - "type": "integer" - }, - { - "type": "null" - } - ], - "default": 30, - "description": "Content source retention in days.", - "title": "Retention Days" + "text_end": { + "title": "Text End", + "type": "integer" }, - "type": { - "default": "conversation", - "description": "Bank type. 'conversation' for chat-turn data with conversation_key + speaker; 'general' for flat entries with optional group_key.", - "title": "Type", - "type": "string" - } - }, - "required": [ - "name" - ], - "title": "CreateMemoryBankBody", - "type": "object" - }, - "CreateSolutionRequest": { - "description": "Request model for creating a new solution", - "properties": { - "description": { - "default": "", - "description": "Description of the solution", - "title": "Description", - "type": "string" + "text_start": { + "title": "Text Start", + "type": "integer" }, - "name": { - "description": "Name of the solution", - "title": "Name", - "type": "string" + "vector": { + "items": { + "type": "number" + }, + "title": "Vector", + "type": "array" } }, "required": [ - "name" + "id", + "text_start", + "text_end", + "text", + "vector", + "batch_size", + "batch_duration" ], - "title": "CreateSolutionRequest", + "title": "ContentEmbeddingResponse", "type": "object" }, - "CreateSourceBody": { - "description": "Request body for creating a content source.", + "CreateAlertConfigRequest": { "properties": { - "chunk_overlap": { + "agent_id": { "anyOf": [ { - "minimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Chunk overlap for content processing.", - "title": "Chunk Overlap" + "description": "Agent ID (for agent alerts)", + "title": "Agent Id" }, - "chunk_size": { + "alert_type": { + "description": "Alert type", + "title": "Alert Type", + "type": "string" + }, + "cooldown_minutes": { "anyOf": [ { - "exclusiveMinimum": 0.0, "type": "integer" }, { "type": "null" } ], - "description": "Chunk size for content processing.", - "title": "Chunk Size" + "description": "Cooldown period in minutes. Omit to use the per-alert-type default (1440 for credit alerts, 60 otherwise).", + "title": "Cooldown Minutes" }, - "content_filter": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Content filter type.", - "title": "Content Filter" + "distribution_type": { + "default": "owner", + "description": "Distribution type (owner, owner_admins, selected_members)", + "title": "Distribution Type", + "type": "string" }, - "dimensions": { + "enabled": { + "default": true, + "description": "Whether the alert config is enabled", + "title": "Enabled", + "type": "boolean" + }, + "recipient_user_ids": { "anyOf": [ { - "exclusiveMinimum": 0.0, - "type": "integer" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "description": "Embedding dimensions override.", - "title": "Dimensions" + "description": "User IDs for selected_members distribution", + "title": "Recipient User Ids" }, - "embedding_model": { + "source_connection_id": { "anyOf": [ { "type": "string" @@ -3046,43 +3068,49 @@ "type": "null" } ], - "description": "Embedding model override.", - "title": "Embedding Model" + "description": "Source connection ID (for source alerts)", + "title": "Source Connection Id" }, - "index_mode": { + "threshold": { "anyOf": [ { - "$ref": "#/components/schemas/SourceIndexMode" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Index mode for custom_index sources: fast_and_cheap (default), balanced, slow_and_thorough, or custom." - }, - "media_types": { + "description": "Threshold configuration", + "title": "Threshold" + } + }, + "required": [ + "alert_type" + ], + "title": "CreateAlertConfigRequest", + "type": "object" + }, + "CreateEvaluationCriteriaRequest": { + "description": "Request body for creating an evaluation criteria.\n\nThe evaluation mode, retry settings, and sample frequency are set at the\nagent level, not per-criteria.", + "properties": { + "description": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "description": "Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored; unsupported values are dropped. Omit / [] for text-only.", - "title": "Media Types" + "title": "Description" }, - "name": { - "description": "Source name.", - "maxLength": 255, - "minLength": 1, - "title": "Name", - "type": "string" + "enabled": { + "default": true, + "title": "Enabled", + "type": "boolean" }, - "polling": { + "evaluation_prompt": { "anyOf": [ { "type": "string" @@ -3091,299 +3119,264 @@ "type": "null" } ], - "description": "Polling interval (e.g. hourly, daily).", - "title": "Polling" + "title": "Evaluation Prompt" }, - "polling_action": { + "evaluation_tier": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/AgentEvaluationTier" }, { "type": "null" } - ], - "description": "Polling action.", - "title": "Polling Action" + ] }, - "polling_max_items": { + "expectation_config": { "anyOf": [ { - "exclusiveMinimum": 0.0, - "type": "integer" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Max items per poll.", - "title": "Polling Max Items" + "title": "Expectation Config" }, - "retention": { - "anyOf": [ - { - "exclusiveMinimum": 0.0, - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Retention period in days.", - "title": "Retention" + "pass_threshold": { + "default": 0.5, + "maximum": 1.0, + "minimum": 0.0, + "title": "Pass Threshold", + "type": "number" }, - "source_type": { - "description": "Source type: rss, website, or custom_index. The legacy value 'file_uploads' is accepted as an alias for custom_index.", - "title": "Source Type", + "step_id": { + "maxLength": 255, + "minLength": 1, + "title": "Step Id", "type": "string" - }, - "url_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "URL record ID (required for rss/website sources).", - "title": "Url Id" } }, "required": [ - "name", - "source_type" + "step_id" ], - "title": "CreateSourceBody", + "title": "CreateEvaluationCriteriaRequest", "type": "object" }, - "DmarcFailingSourceResponse": { + "CreateEvaluationResultRequest": { + "description": "Request body for recording an evaluation result.", "properties": { - "failed_count": { - "title": "Failed Count", - "type": "integer" + "agent_run_id": { + "format": "uuid", + "title": "Agent Run Id", + "type": "string" }, - "header_from": { + "agent_step_run_id": { "anyOf": [ { + "format": "uuid", "type": "string" }, { "type": "null" } ], - "title": "Header From" + "title": "Agent Step Run Id" }, - "source_ip": { - "title": "Source Ip", - "type": "string" - } - }, - "required": [ - "source_ip", - "failed_count" - ], - "title": "DmarcFailingSourceResponse", - "type": "object" - }, - "DmarcSummaryResponse": { - "properties": { - "dispositions": { - "additionalProperties": { - "type": "integer" - }, - "title": "Dispositions", - "type": "object" + "details": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Details" }, - "failed_messages": { - "title": "Failed Messages", + "flagged": { + "default": false, + "title": "Flagged", + "type": "boolean" + }, + "retry_count": { + "default": 0, + "minimum": 0.0, + "title": "Retry Count", "type": "integer" }, - "monitored": { - "default": true, - "title": "Monitored", + "retry_triggered": { + "default": false, + "title": "Retry Triggered", "type": "boolean" }, - "pass_rate": { + "score": { "anyOf": [ { + "maximum": 1.0, + "minimum": 0.0, "type": "number" }, { "type": "null" } ], - "title": "Pass Rate" - }, - "passed_messages": { - "title": "Passed Messages", - "type": "integer" - }, - "report_count": { - "title": "Report Count", - "type": "integer" - }, - "top_failing_sources": { - "items": { - "$ref": "#/components/schemas/DmarcFailingSourceResponse" - }, - "title": "Top Failing Sources", - "type": "array" - }, - "total_messages": { - "title": "Total Messages", - "type": "integer" + "title": "Score" }, - "window_days": { - "title": "Window Days", - "type": "integer" + "status": { + "$ref": "#/components/schemas/EvaluationStatus" } }, "required": [ - "window_days", - "report_count", - "total_messages", - "passed_messages", - "failed_messages" + "agent_run_id", + "status" ], - "title": "DmarcSummaryResponse", + "title": "CreateEvaluationResultRequest", "type": "object" }, - "DnsProviderResponse": { + "CreateExperimentResponse": { "properties": { - "dashboard_url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Dashboard Url" - }, - "key": { - "title": "Key", - "type": "string" - }, - "mx_priority_separate": { - "default": true, - "title": "Mx Priority Separate", - "type": "boolean" - }, - "name": { - "title": "Name", + "experiment_id": { + "title": "Experiment Id", "type": "string" }, - "tips": { - "items": { - "type": "string" - }, - "title": "Tips", - "type": "array" - }, - "txt_quotes": { - "default": "strip", - "title": "Txt Quotes", + "status": { + "title": "Status", "type": "string" } }, "required": [ - "key", - "name" + "experiment_id", + "status" ], - "title": "DnsProviderResponse", + "title": "CreateExperimentResponse", "type": "object" }, - "DnsRecordResponse": { + "CreateKnowledgeBaseBody": { + "description": "Request body for creating a knowledge base.", "properties": { - "detail": { + "default_score_threshold": { "anyOf": [ { - "type": "string" + "maximum": 1.0, + "minimum": 0.0, + "type": "number" }, { "type": "null" } ], - "title": "Detail" - }, - "key": { - "title": "Key", - "type": "string" + "description": "Prefilled into Minimum Rerank Score on a new retrieval step in the editor. Not applied at retrieval time \u2014 the step's own value is used.", + "title": "Default Score Threshold" }, - "mx_host": { + "default_top_k": { "anyOf": [ { - "type": "string" + "exclusiveMinimum": 0.0, + "maximum": 200.0, + "type": "integer" }, { "type": "null" } ], - "title": "Mx Host" + "description": "Prefilled into Top K on a new retrieval step in the editor. Not applied at retrieval time.", + "title": "Default Top K" }, - "mx_priority": { + "default_top_n": { "anyOf": [ { + "exclusiveMinimum": 0.0, + "maximum": 200.0, "type": "integer" }, { "type": "null" } ], - "title": "Mx Priority" + "description": "Prefilled into Top N on a new retrieval step in the editor. Not applied at retrieval time \u2014 the step's own value is used.", + "title": "Default Top N" + }, + "description": { + "anyOf": [ + { + "maxLength": 1000, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional description.", + "title": "Description" }, "name": { + "description": "Knowledge base name.", + "maxLength": 255, + "minLength": 1, "title": "Name", "type": "string" }, - "ok": { - "title": "Ok", - "type": "boolean" - }, - "relative_name": { - "title": "Relative Name", - "type": "string" - }, - "type": { - "title": "Type", - "type": "string" + "reranker_model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Reranker model to use \u2014 a `model_type` from `GET /models/rerankers`. Pass \"none\" to disable reranking (not a value from that list). Omit it for a default chosen from the sources (\"none\" when every source embeds media natively, whose chunks carry no text for a reranker to score). \"\" is accepted as a synonym for \"none\".", + "title": "Reranker Model" }, - "value": { - "title": "Value", - "type": "string" + "source_ids": { + "description": "List of source connection IDs to link.", + "items": { + "type": "string" + }, + "minItems": 1, + "title": "Source Ids", + "type": "array" } }, "required": [ - "key", - "type", "name", - "relative_name", - "value", - "ok" + "source_ids" ], - "title": "DnsRecordResponse", + "title": "CreateKnowledgeBaseBody", "type": "object" }, - "DocsSearchResultResponse": { + "CreateMemoryBankBody": { + "description": "Request body for creating a memory bank.", "properties": { - "anchor": { + "chunk_overlap": { "anyOf": [ { - "type": "string" + "minimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Anchor" + "description": "Chunk overlap (custom mode only).", + "title": "Chunk Overlap" }, - "doc_slug": { - "title": "Doc Slug", - "type": "string" + "chunk_size": { + "anyOf": [ + { + "exclusiveMinimum": 0.0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Chunk size (custom mode only).", + "title": "Chunk Size" }, - "highlight": { + "compaction_prompt": { "anyOf": [ { "type": "string" @@ -3392,58 +3385,36 @@ "type": "null" } ], - "title": "Highlight" - }, - "score": { - "title": "Score", - "type": "number" + "description": "Custom prompt used when compacting older entries. When set, entries that exceed a threshold are summarized into a new entry before being soft-deleted.", + "title": "Compaction Prompt" }, - "snippet": { + "description": { "anyOf": [ { + "maxLength": 1000, "type": "string" }, { "type": "null" } ], - "title": "Snippet" + "description": "Optional description of the bank's purpose.", + "title": "Description" }, - "title": { - "title": "Title", - "type": "string" - } - }, - "required": [ - "doc_slug", - "title", - "snippet", - "score", - "anchor", - "highlight" - ], - "title": "DocsSearchResultResponse", - "type": "object" - }, - "EmailDomainResponse": { - "properties": { - "delegated": { - "default": false, - "title": "Delegated", - "type": "boolean" - }, - "dns_records": { - "items": { - "$ref": "#/components/schemas/DnsRecordResponse" - }, - "title": "Dns Records", - "type": "array" - }, - "domain": { - "title": "Domain", - "type": "string" + "dimensions": { + "anyOf": [ + { + "exclusiveMinimum": 0.0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Embedding dimensions (custom mode only).", + "title": "Dimensions" }, - "error_message": { + "embedding_model": { "anyOf": [ { "type": "string" @@ -3452,148 +3423,144 @@ "type": "null" } ], - "title": "Error Message" - }, - "id": { - "format": "uuid", - "title": "Id", - "type": "string" - }, - "is_primary": { - "title": "Is Primary", - "type": "boolean" - }, - "kind": { - "title": "Kind", - "type": "string" + "description": "Custom embedding model (custom mode only).", + "title": "Embedding Model" }, - "last_checked_at": { + "max_age_days": { "anyOf": [ { - "format": "date-time", - "type": "string" + "exclusiveMinimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Last Checked At" + "description": "DEPRECATED and no longer applied. Age used to trigger compaction, which duplicated retention_days \u2014 both removed the same entries at the same age. Age now belongs solely to retention_days, which deletes; compaction triggers on max_size_tokens and max_turns. Rejected with 400 for clients sending Seclai-Version 2026-08-03 or later; accepted and stored but inert for older clients.", + "title": "Max Age Days" }, - "provider": { + "max_size_tokens": { "anyOf": [ { - "$ref": "#/components/schemas/DnsProviderResponse" + "exclusiveMinimum": 0.0, + "type": "integer" }, { "type": "null" } - ] + ], + "description": "Max total tokens (per partition) before compaction. Checked inline after each write and by the hourly background sweep.", + "title": "Max Size Tokens" }, - "regressing": { - "default": false, - "title": "Regressing", - "type": "boolean" + "max_turns": { + "anyOf": [ + { + "exclusiveMinimum": 0.0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Max conversation turns (per partition) before compaction. Checked inline after each write and by the hourly background sweep.", + "title": "Max Turns" }, - "status": { - "title": "Status", + "mode": { + "default": "fast_and_cheap", + "description": "Embedding quality / cost trade-off. One of: fast_and_cheap, balanced, slow_and_thorough, custom.", + "title": "Mode", "type": "string" }, - "verified": { - "default": false, - "title": "Verified", - "type": "boolean" + "name": { + "description": "Memory bank name.", + "maxLength": 255, + "minLength": 1, + "title": "Name", + "type": "string" }, - "verified_at": { + "retention_days": { "anyOf": [ { - "format": "date-time", - "type": "string" + "exclusiveMinimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Verified At" + "description": "Retention in days \u2014 when entries are deleted outright, text and embeddings. This is the only age-based control; compaction triggers on max_size_tokens and max_turns. For clients sending Seclai-Version 2026-08-03 or later, omitting the field resolves per bank type: 90 days for a conversation bank, indefinite for a general bank. Older clients keep the previous default of 30 days for a conversation bank \u2014 unless a longer max_age_days was sent, which wins, since the window is never lowered beneath the only age the caller expressed \u2014 while a general bank keeps entries indefinitely. Send an explicit value (or null for indefinite) to be unambiguous on every version.", + "title": "Retention Days" }, - "zone_apex": { - "default": "", - "title": "Zone Apex", + "strip_quoted_reply_chains": { + "default": false, + "description": "Conversation banks only. When true, a conversation turn written to this bank has the quoted reply chain an email client prepends to a reply dropped from it. Only inbound (user) turns are affected, and only words in a run of at least ~40 matching a recent turn word for word are dropped (line wrapping and punctuation at a word's edge are ignored). A word the sender changed is kept, including a one-character change inside a link, address or amount, unless the change is only to that edge punctuation.", + "title": "Strip Quoted Reply Chains", + "type": "boolean" + }, + "type": { + "default": "conversation", + "description": "Bank type. 'conversation' for chat-turn data with conversation_key + speaker; 'general' for flat entries with optional group_key.", + "title": "Type", "type": "string" } }, "required": [ - "id", - "domain", - "kind", - "status", - "is_primary" + "name" ], - "title": "EmailDomainResponse", + "title": "CreateMemoryBankBody", "type": "object" }, - "EmailDomainsListResponse": { + "CreateSolutionRequest": { + "description": "Request model for creating a new solution", "properties": { - "can_add_custom": { - "default": false, - "title": "Can Add Custom", - "type": "boolean" - }, - "can_add_vanity": { - "default": false, - "title": "Can Add Vanity", - "type": "boolean" - }, - "custom_plan_names": { - "items": { - "type": "string" - }, - "title": "Custom Plan Names", - "type": "array" - }, - "domains": { - "items": { - "$ref": "#/components/schemas/EmailDomainResponse" - }, - "title": "Domains", - "type": "array" - }, - "has_custom": { - "default": false, - "title": "Has Custom", - "type": "boolean" - }, - "has_vanity": { - "default": false, - "title": "Has Vanity", - "type": "boolean" + "description": { + "default": "", + "description": "Description of the solution", + "title": "Description", + "type": "string" }, - "vanity_plan_names": { - "items": { - "type": "string" - }, - "title": "Vanity Plan Names", - "type": "array" + "name": { + "description": "Name of the solution", + "title": "Name", + "type": "string" } }, - "title": "EmailDomainsListResponse", + "required": [ + "name" + ], + "title": "CreateSolutionRequest", "type": "object" }, - "EmailTriggerConfigResponse": { - "description": "An EMAIL_RECEIVED trigger's resolved address(es) and config.", + "CreateSourceBody": { + "description": "Request body for creating a content source.", "properties": { - "agent_id": { - "format": "uuid", - "title": "Agent Id", - "type": "string" + "chunk_overlap": { + "anyOf": [ + { + "minimum": 0.0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Chunk overlap for content processing.", + "title": "Chunk Overlap" }, - "email_addresses": { - "items": { - "type": "string" - }, - "title": "Email Addresses", - "type": "array" + "chunk_size": { + "anyOf": [ + { + "exclusiveMinimum": 0.0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Chunk size for content processing.", + "title": "Chunk Size" }, - "email_alias": { + "content_filter": { "anyOf": [ { "type": "string" @@ -3602,73 +3569,68 @@ "type": "null" } ], - "title": "Email Alias" + "description": "Content filter type.", + "title": "Content Filter" }, - "email_allowed_senders": { + "dimensions": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "exclusiveMinimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Email Allowed Senders" - }, - "email_ignore_auto_generated": { - "default": true, - "title": "Email Ignore Auto Generated", - "type": "boolean" - }, - "email_queue_on_quota": { - "default": false, - "title": "Email Queue On Quota", - "type": "boolean" + "description": "Embedding dimensions override.", + "title": "Dimensions" }, - "email_require_sender_auth": { - "default": true, - "title": "Email Require Sender Auth", - "type": "boolean" - }, - "trigger_id": { - "format": "uuid", - "title": "Trigger Id", - "type": "string" + "embedding_model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Embedding model override \u2014 a `model_type` from `GET /models/embedders`, which also reports each embedder's `supported_input_media`. Defaults to the platform embedder (`default_model_type` on that endpoint) when omitted. Indexing images or video requires an embedder that lists that modality.", + "title": "Embedding Model" }, - "trigger_type": { - "title": "Trigger Type", - "type": "string" - } - }, - "required": [ - "trigger_id", - "agent_id", - "trigger_type" - ], - "title": "EmailTriggerConfigResponse", - "type": "object" - }, - "EvaluationCriteriaResponse": { - "description": "Response schema for evaluation criteria.", - "properties": { - "account_id": { - "format": "uuid", - "title": "Account Id", - "type": "string" + "index_mode": { + "anyOf": [ + { + "$ref": "#/components/schemas/SourceIndexMode" + }, + { + "type": "null" + } + ], + "description": "Index mode for custom_index sources: fast_and_cheap (default), balanced, slow_and_thorough, or custom." }, - "agent_id": { - "format": "uuid", - "title": "Agent Id", - "type": "string" + "media_types": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored (see `supported_input_media` on GET /models/embedders); unsupported values are dropped. Omit / [] for text-only.", + "title": "Media Types" }, - "created_at": { - "title": "Created At", + "name": { + "description": "Source name.", + "maxLength": 255, + "minLength": 1, + "title": "Name", "type": "string" }, - "description": { + "polling": { "anyOf": [ { "type": "string" @@ -3677,18 +3639,10 @@ "type": "null" } ], - "title": "Description" - }, - "enabled": { - "title": "Enabled", - "type": "boolean" - }, - "evaluation_mode": { - "description": "Runtime behavior mode. output_expectation (manual validation), eval_and_retry (every run + retry), sample_and_flag (sampled monitoring).", - "title": "Evaluation Mode", - "type": "string" + "description": "Polling interval (e.g. hourly, daily).", + "title": "Polling" }, - "evaluation_prompt": { + "polling_action": { "anyOf": [ { "type": "string" @@ -3697,59 +3651,41 @@ "type": "null" } ], - "title": "Evaluation Prompt" + "description": "Polling action.", + "title": "Polling Action" }, - "evaluation_tier": { + "polling_max_items": { "anyOf": [ { - "type": "string" + "exclusiveMinimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Evaluation Tier" + "description": "Max items per poll.", + "title": "Polling Max Items" }, - "expectation_config": { + "retention": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "exclusiveMinimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Expectation Config" + "description": "Retention period in days.", + "title": "Retention" }, - "id": { - "format": "uuid", - "title": "Id", + "source_type": { + "description": "Source type: rss, website, or custom_index. The legacy value 'file_uploads' is accepted as an alias for custom_index.", + "title": "Source Type", "type": "string" }, - "max_retries": { - "title": "Max Retries", - "type": "integer" - }, - "pass_threshold": { - "description": "Score cutoff for pass/fail, inclusive (0.0 to 1.0).", - "maximum": 1.0, - "minimum": 0.0, - "title": "Pass Threshold", - "type": "number" - }, - "result_summary": { - "additionalProperties": { - "type": "integer" - }, - "title": "Result Summary", - "type": "object" - }, - "retry_on_failure": { - "title": "Retry On Failure", - "type": "boolean" - }, - "step_id": { + "url_id": { "anyOf": [ { "type": "string" @@ -3758,266 +3694,173 @@ "type": "null" } ], - "title": "Step Id" - }, - "updated_at": { - "title": "Updated At", - "type": "string" + "description": "URL record ID (required for rss/website sources).", + "title": "Url Id" } }, "required": [ - "id", - "agent_id", - "account_id", - "description", - "evaluation_mode", - "enabled", - "step_id", - "expectation_config", - "max_retries", - "retry_on_failure", - "evaluation_prompt", - "pass_threshold", - "evaluation_tier", - "created_at", - "updated_at", - "result_summary" + "name", + "source_type" ], - "title": "EvaluationCriteriaResponse", + "title": "CreateSourceBody", "type": "object" }, - "EvaluationResultListResponse": { - "description": "Paginated list of evaluation results.", + "DmarcFailingSourceResponse": { "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/EvaluationResultResponse" - }, - "title": "Data", - "type": "array" - }, - "limit": { - "title": "Limit", - "type": "integer" - }, - "page": { - "title": "Page", - "type": "integer" - }, - "total": { - "title": "Total", + "failed_count": { + "title": "Failed Count", "type": "integer" - } - }, - "required": [ - "data", - "total", - "page", - "limit" - ], - "title": "EvaluationResultListResponse", - "type": "object" - }, - "EvaluationResultResponse": { - "description": "Response schema for a single evaluation result.", - "properties": { - "agent_run_id": { - "format": "uuid", - "title": "Agent Run Id", - "type": "string" }, - "agent_step_run_id": { + "header_from": { "anyOf": [ { - "format": "uuid", "type": "string" }, { "type": "null" } ], - "title": "Agent Step Run Id" + "title": "Header From" }, - "created_at": { - "title": "Created At", + "source_ip": { + "title": "Source Ip", "type": "string" + } + }, + "required": [ + "source_ip", + "failed_count" + ], + "title": "DmarcFailingSourceResponse", + "type": "object" + }, + "DmarcSummaryResponse": { + "properties": { + "dispositions": { + "additionalProperties": { + "type": "integer" + }, + "title": "Dispositions", + "type": "object" }, - "criteria_id": { - "format": "uuid", - "title": "Criteria Id", - "type": "string" + "failed_messages": { + "title": "Failed Messages", + "type": "integer" }, - "details": { + "monitored": { + "default": true, + "title": "Monitored", + "type": "boolean" + }, + "pass_rate": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "number" }, { "type": "null" } ], - "description": "Evaluation details including explanation and raw LLM response.", - "title": "Details" + "title": "Pass Rate" }, - "evaluated_at": { - "title": "Evaluated At", - "type": "string" + "passed_messages": { + "title": "Passed Messages", + "type": "integer" }, - "flagged": { - "description": "True when the result was flagged for human review.", - "title": "Flagged", - "type": "boolean" - }, - "id": { - "format": "uuid", - "title": "Id", - "type": "string" - }, - "retry_count": { - "title": "Retry Count", + "report_count": { + "title": "Report Count", "type": "integer" }, - "retry_triggered": { - "title": "Retry Triggered", - "type": "boolean" + "top_failing_sources": { + "items": { + "$ref": "#/components/schemas/DmarcFailingSourceResponse" + }, + "title": "Top Failing Sources", + "type": "array" }, - "score": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "description": "LLM-assigned quality score between 0.0 (worst) and 1.0 (best).", - "title": "Score" + "total_messages": { + "title": "Total Messages", + "type": "integer" }, - "status": { - "description": "Outcome status: pending, passed, failed, skipped, or error.", - "title": "Status", - "type": "string" + "window_days": { + "title": "Window Days", + "type": "integer" } }, "required": [ - "id", - "criteria_id", - "agent_run_id", - "agent_step_run_id", - "status", - "retry_triggered", - "retry_count", - "flagged", - "evaluated_at", - "created_at" + "window_days", + "report_count", + "total_messages", + "passed_messages", + "failed_messages" ], - "title": "EvaluationResultResponse", + "title": "DmarcSummaryResponse", "type": "object" }, - "EvaluationResultSummaryResponse": { - "description": "Aggregated pass/fail/error counts and average score for a criteria.", + "DnsProviderResponse": { "properties": { - "average_score": { + "dashboard_url": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "description": "Mean score across all evaluated results, or null if none.", - "title": "Average Score" - }, - "error": { - "title": "Error", - "type": "integer" + "title": "Dashboard Url" }, - "failed": { - "title": "Failed", - "type": "integer" + "key": { + "title": "Key", + "type": "string" }, - "flagged": { - "title": "Flagged", - "type": "integer" + "mx_priority_separate": { + "default": true, + "title": "Mx Priority Separate", + "type": "boolean" }, - "passed": { - "title": "Passed", - "type": "integer" + "name": { + "title": "Name", + "type": "string" }, - "total": { - "title": "Total", - "type": "integer" - } - }, - "required": [ - "total", - "passed", - "failed", - "error", - "flagged" - ], - "title": "EvaluationResultSummaryResponse", - "type": "object" - }, - "EvaluationResultWithCriteriaListResponse": { - "description": "Paginated list of evaluation results with criteria context.", - "properties": { - "data": { + "tips": { "items": { - "$ref": "#/components/schemas/EvaluationResultWithCriteriaResponse" + "type": "string" }, - "title": "Data", + "title": "Tips", "type": "array" }, - "limit": { - "title": "Limit", - "type": "integer" - }, - "page": { - "title": "Page", - "type": "integer" - }, - "total": { - "title": "Total", - "type": "integer" + "txt_quotes": { + "default": "strip", + "title": "Txt Quotes", + "type": "string" } }, "required": [ - "data", - "total", - "page", - "limit" + "key", + "name" ], - "title": "EvaluationResultWithCriteriaListResponse", + "title": "DnsProviderResponse", "type": "object" }, - "EvaluationResultWithCriteriaResponse": { - "description": "Evaluation result including criteria context for aggregated listing.", + "DnsRecordResponse": { "properties": { - "agent_run_id": { - "format": "uuid", - "title": "Agent Run Id", - "type": "string" - }, - "agent_step_run_id": { + "detail": { "anyOf": [ { - "format": "uuid", "type": "string" }, { "type": "null" } ], - "title": "Agent Step Run Id" + "title": "Detail" }, - "created_at": { - "title": "Created At", + "key": { + "title": "Key", "type": "string" }, - "criteria_description": { + "mx_host": { "anyOf": [ { "type": "string" @@ -4026,66 +3869,69 @@ "type": "null" } ], - "title": "Criteria Description" - }, - "criteria_id": { - "format": "uuid", - "title": "Criteria Id", - "type": "string" + "title": "Mx Host" }, - "details": { + "mx_priority": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "integer" }, { "type": "null" } ], - "description": "Evaluation details including explanation and raw LLM response.", - "title": "Details" + "title": "Mx Priority" }, - "evaluated_at": { - "title": "Evaluated At", + "name": { + "title": "Name", "type": "string" }, - "flagged": { - "description": "True when the result was flagged for human review.", - "title": "Flagged", + "ok": { + "title": "Ok", "type": "boolean" }, - "id": { - "format": "uuid", - "title": "Id", + "relative_name": { + "title": "Relative Name", "type": "string" }, - "retry_count": { - "title": "Retry Count", - "type": "integer" - }, - "retry_triggered": { - "title": "Retry Triggered", - "type": "boolean" + "type": { + "title": "Type", + "type": "string" }, - "score": { + "value": { + "title": "Value", + "type": "string" + } + }, + "required": [ + "key", + "type", + "name", + "relative_name", + "value", + "ok" + ], + "title": "DnsRecordResponse", + "type": "object" + }, + "DocsSearchResultResponse": { + "properties": { + "anchor": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "description": "LLM-assigned quality score between 0.0 (worst) and 1.0 (best).", - "title": "Score" + "title": "Anchor" }, - "status": { - "description": "Outcome status: pending, passed, failed, skipped, or error.", - "title": "Status", + "doc_slug": { + "title": "Doc Slug", "type": "string" }, - "step_id": { + "highlight": { "anyOf": [ { "type": "string" @@ -4094,164 +3940,43 @@ "type": "null" } ], - "title": "Step Id" + "title": "Highlight" + }, + "score": { + "title": "Score", + "type": "number" + }, + "snippet": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Snippet" + }, + "title": { + "title": "Title", + "type": "string" } }, "required": [ - "id", - "criteria_id", - "agent_run_id", - "agent_step_run_id", - "status", - "retry_triggered", - "retry_count", - "flagged", - "evaluated_at", - "created_at", - "step_id", - "criteria_description" - ], - "title": "EvaluationResultWithCriteriaResponse", - "type": "object" - }, - "EvaluationRunSummaryListResponse": { - "description": "Paginated list of per-run evaluation summaries.", - "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/EvaluationRunSummaryResponse" - }, - "title": "Data", - "type": "array" - }, - "limit": { - "title": "Limit", - "type": "integer" - }, - "page": { - "title": "Page", - "type": "integer" - }, - "total": { - "title": "Total", - "type": "integer" - } - }, - "required": [ - "data", - "total", - "page", - "limit" - ], - "title": "EvaluationRunSummaryListResponse", - "type": "object" - }, - "EvaluationRunSummaryResponse": { - "description": "Per-run evaluation summary with pass/fail/error breakdown.", - "properties": { - "agent_run_id": { - "format": "uuid", - "title": "Agent Run Id", - "type": "string" - }, - "error_count": { - "title": "Error Count", - "type": "integer" - }, - "failed_count": { - "title": "Failed Count", - "type": "integer" - }, - "flagged_count": { - "title": "Flagged Count", - "type": "integer" - }, - "passed_count": { - "title": "Passed Count", - "type": "integer" - }, - "run_created_at": { - "title": "Run Created At", - "type": "string" - }, - "run_status": { - "description": "Status of the agent run (processing, completed, failed).", - "title": "Run Status", - "type": "string" - }, - "skipped_count": { - "title": "Skipped Count", - "type": "integer" - }, - "total_evaluations": { - "title": "Total Evaluations", - "type": "integer" - } - }, - "required": [ - "agent_run_id", - "run_status", - "run_created_at", - "total_evaluations", - "passed_count", - "failed_count", - "error_count", - "skipped_count", - "flagged_count" - ], - "title": "EvaluationRunSummaryResponse", - "type": "object" - }, - "EvaluationStatus": { - "description": "Result status of a single evaluation run.", - "enum": [ - "pending", - "passed", - "failed", - "skipped", - "error" + "doc_slug", + "title", + "snippet", + "score", + "anchor", + "highlight" ], - "title": "EvaluationStatus", - "type": "string" - }, - "ExamplePrompt": { - "additionalProperties": { - "type": "string" - }, + "title": "DocsSearchResultResponse", "type": "object" }, - "ExecutedActionResponse": { - "description": "A single executed action result.", + "EffortOptionsResponse": { + "description": "The reasoning-effort values a model accepts.", "properties": { - "action_type": { - "description": "Type of the executed action.", - "title": "Action Type", - "type": "string" - }, - "description": { - "description": "Human-readable description.", - "title": "Description", - "type": "string" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Error message if failed.", - "title": "Error" - }, - "needs_clarification": { - "default": false, - "description": "True when the action paused for a clarifying question rather than failing. The created resource is kept and the question is in ``description``/``error``.", - "title": "Needs Clarification", - "type": "boolean" - }, - "resource_id": { + "default": { "anyOf": [ { "type": "string" @@ -4260,50 +3985,45 @@ "type": "null" } ], - "description": "ID of the affected resource.", - "title": "Resource Id" + "description": "The vendor's default level, when known.", + "title": "Default" }, - "resource_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Type of the affected resource.", - "title": "Resource Type" + "kind": { + "description": "`levels` today: `values` lists them.", + "title": "Kind", + "type": "string" }, - "success": { - "default": true, - "description": "Whether the action succeeded.", - "title": "Success", - "type": "boolean" + "values": { + "description": "Accepted values, weakest first.", + "items": { + "type": "string" + }, + "title": "Values", + "type": "array" } }, "required": [ - "action_type", - "description" + "kind" ], - "title": "ExecutedActionResponse", + "title": "EffortOptionsResponse", "type": "object" }, - "ExperimentDetailResponse": { + "EmailDomainResponse": { "properties": { - "completed_at": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Completed At" + "delegated": { + "default": false, + "title": "Delegated", + "type": "boolean" }, - "created_at": { - "title": "Created At", + "dns_records": { + "items": { + "$ref": "#/components/schemas/DnsRecordResponse" + }, + "title": "Dns Records", + "type": "array" + }, + "domain": { + "title": "Domain", "type": "string" }, "error_message": { @@ -4317,67 +4037,234 @@ ], "title": "Error Message" }, - "evaluation_complexity": { - "title": "Evaluation Complexity", + "id": { + "format": "uuid", + "title": "Id", "type": "string" }, - "evaluation_mode": { - "title": "Evaluation Mode", + "is_primary": { + "title": "Is Primary", + "type": "boolean" + }, + "kind": { + "title": "Kind", "type": "string" }, - "evaluator_model_id": { + "last_checked_at": { "anyOf": [ { + "format": "date-time", "type": "string" }, { "type": "null" } ], - "title": "Evaluator Model Id" + "title": "Last Checked At" }, - "id": { - "title": "Id", + "provider": { + "anyOf": [ + { + "$ref": "#/components/schemas/DnsProviderResponse" + }, + { + "type": "null" + } + ] + }, + "regressing": { + "default": false, + "title": "Regressing", + "type": "boolean" + }, + "status": { + "title": "Status", "type": "string" }, - "include_step_output_in_evaluation": { - "title": "Include Step Output In Evaluation", + "verified": { + "default": false, + "title": "Verified", "type": "boolean" }, - "json_template": { + "verified_at": { "anyOf": [ { + "format": "date-time", "type": "string" }, { "type": "null" } ], - "title": "Json Template" + "title": "Verified At" }, - "progress_current": { + "zone_apex": { + "default": "", + "title": "Zone Apex", + "type": "string" + } + }, + "required": [ + "id", + "domain", + "kind", + "status", + "is_primary" + ], + "title": "EmailDomainResponse", + "type": "object" + }, + "EmailDomainsListResponse": { + "properties": { + "can_add_custom": { + "default": false, + "title": "Can Add Custom", + "type": "boolean" + }, + "can_add_vanity": { + "default": false, + "title": "Can Add Vanity", + "type": "boolean" + }, + "custom_plan_names": { + "items": { + "type": "string" + }, + "title": "Custom Plan Names", + "type": "array" + }, + "domains": { + "items": { + "$ref": "#/components/schemas/EmailDomainResponse" + }, + "title": "Domains", + "type": "array" + }, + "has_custom": { + "default": false, + "title": "Has Custom", + "type": "boolean" + }, + "has_vanity": { + "default": false, + "title": "Has Vanity", + "type": "boolean" + }, + "vanity_plan_names": { + "items": { + "type": "string" + }, + "title": "Vanity Plan Names", + "type": "array" + } + }, + "title": "EmailDomainsListResponse", + "type": "object" + }, + "EmailTriggerConfigResponse": { + "description": "An EMAIL_RECEIVED trigger's resolved address(es) and config.", + "properties": { + "agent_id": { + "format": "uuid", + "title": "Agent Id", + "type": "string" + }, + "email_addresses": { + "items": { + "type": "string" + }, + "title": "Email Addresses", + "type": "array" + }, + "email_alias": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "title": "Progress Current" + "title": "Email Alias" }, - "progress_message": { + "email_allowed_senders": { "anyOf": [ { - "type": "string" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "title": "Progress Message" + "title": "Email Allowed Senders" }, - "progress_total": { + "email_ignore_auto_generated": { + "default": true, + "title": "Email Ignore Auto Generated", + "type": "boolean" + }, + "email_queue_on_quota": { + "default": false, + "title": "Email Queue On Quota", + "type": "boolean" + }, + "email_require_sender_auth": { + "default": true, + "title": "Email Require Sender Auth", + "type": "boolean" + }, + "trigger_id": { + "format": "uuid", + "title": "Trigger Id", + "type": "string" + }, + "trigger_type": { + "title": "Trigger Type", + "type": "string" + } + }, + "required": [ + "trigger_id", + "agent_id", + "trigger_type" + ], + "title": "EmailTriggerConfigResponse", + "type": "object" + }, + "EmbeddingModalityRateResponse": { + "description": "Per-modality rate for a multi-modal embedder.\n\nThe default ``credits`` field on :class:`EmbeddingModelResponse` is the\ntext rate (credits per ~1k English words). Embedders that index image or\nvideo chunks natively charge those modalities at a different rate and unit\n\u2014 e.g. Cohere Embed v4 prices images per record; Nova 2 Multimodal prices\nvideo per second. Surfacing the modality and unit lets a caller render an\nhonest cost breakdown alongside the text rate.", + "properties": { + "credits": { + "description": "Rate value in the unit below", + "title": "Credits", + "type": "number" + }, + "modality": { + "description": "Modality kind, e.g. image / video", + "title": "Modality", + "type": "string" + }, + "unit": { + "description": "Billing unit for this rate (credit_per_record / credit_per_second / credit_per_1000_tokens).", + "title": "Unit", + "type": "string" + } + }, + "required": [ + "modality", + "credits", + "unit" + ], + "title": "EmbeddingModalityRateResponse", + "type": "object" + }, + "EmbeddingModelListResponse": { + "description": "Legacy (header-less) response shape for the embedder catalog.", + "properties": { + "default_dimension": { "anyOf": [ { "type": "integer" @@ -4386,32 +4273,60 @@ "type": "null" } ], - "title": "Progress Total" - }, - "prompt": { - "title": "Prompt", - "type": "string" + "description": "Dimensions used with the default embedding model", + "title": "Default Dimension" }, - "result_data": { + "default_model_type": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "title": "Result Data" + "description": "Embedding model used when a source does not override it", + "title": "Default Model Type" }, - "selected_model_ids": { + "file_processing_credits_per_mb": { + "description": "Credits per MB for file processing at ingest", + "title": "File Processing Credits Per Mb", + "type": "number" + }, + "models": { + "description": "Available embedding models", "items": { - "type": "string" + "$ref": "#/components/schemas/EmbeddingModelResponse" }, - "title": "Selected Model Ids", + "title": "Models", "type": "array" }, - "selected_step_output": { + "storage_credits": { + "description": "Monthly storage credits per dimension count", + "items": { + "$ref": "#/components/schemas/EmbeddingStorageCreditsResponse" + }, + "title": "Storage Credits", + "type": "array" + } + }, + "required": [ + "models", + "storage_credits", + "file_processing_credits_per_mb" + ], + "title": "EmbeddingModelListResponse", + "type": "object" + }, + "EmbeddingModelResponse": { + "description": "Information about an embedding model.", + "properties": { + "credits": { + "description": "Estimated credits per 1,000 English words", + "title": "Credits", + "type": "number" + }, + "description": { "anyOf": [ { "type": "string" @@ -4420,148 +4335,90 @@ "type": "null" } ], - "title": "Selected Step Output" + "description": "Model description", + "title": "Description" }, - "started_at": { + "dimensions": { + "description": "Dimensions options", + "items": { + "type": "integer" + }, + "title": "Dimensions", + "type": "array" + }, + "is_new": { + "default": false, + "description": "Whether the model is newly released", + "title": "Is New", + "type": "boolean" + }, + "max_input_tokens": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Started At" + "description": "Max input tokens per request", + "title": "Max Input Tokens" }, - "status": { - "title": "Status", + "model_id": { + "description": "Model identifier", + "title": "Model Id", "type": "string" }, - "system_prompt": { - "title": "System Prompt", + "model_type": { + "description": "Full model type identifier (enum value). This is the value to send as embedding_model when creating a source.", + "title": "Model Type", "type": "string" - } - }, - "required": [ - "id", - "status", - "created_at", - "selected_model_ids", - "evaluation_mode", - "evaluation_complexity", - "prompt", - "system_prompt", - "evaluator_model_id", - "include_step_output_in_evaluation", - "selected_step_output", - "json_template", - "started_at", - "completed_at", - "error_message", - "progress_current", - "progress_total", - "progress_message", - "result_data" - ], - "title": "ExperimentDetailResponse", - "type": "object" - }, - "ExperimentListResponse": { - "description": "``GET /models/playground/experiments`` legacy/default shape; 2026-07-27+\nclients get the canonical ``{data, pagination}`` envelope.", - "properties": { - "experiments": { + }, + "mteb_retrieval_score": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "MTEB retrieval score", + "title": "Mteb Retrieval Score" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Human-readable model name", + "title": "Name" + }, + "per_modality_rates": { + "description": "Non-text rates the vendor charges for this embedder (image, video, audio). Empty for text-only embedders.", "items": { - "$ref": "#/components/schemas/ExperimentSummaryResponse" + "$ref": "#/components/schemas/EmbeddingModalityRateResponse" }, - "title": "Experiments", + "title": "Per Modality Rates", "type": "array" }, - "total": { - "title": "Total", - "type": "integer" - } - }, - "required": [ - "experiments", - "total" - ], - "title": "ExperimentListResponse", - "type": "object" - }, - "ExperimentSummaryResponse": { - "properties": { - "created_at": { - "title": "Created At", - "type": "string" - }, - "evaluation_complexity": { - "title": "Evaluation Complexity", - "type": "string" - }, - "evaluation_mode": { - "title": "Evaluation Mode", - "type": "string" - }, - "id": { - "title": "Id", - "type": "string" - }, - "selected_model_ids": { - "items": { - "type": "string" - }, - "title": "Selected Model Ids", - "type": "array" - }, - "status": { - "title": "Status", - "type": "string" - } - }, - "required": [ - "id", - "status", - "created_at", - "selected_model_ids", - "evaluation_mode", - "evaluation_complexity" - ], - "title": "ExperimentSummaryResponse", - "type": "object" - }, - "ExportFormat": { - "description": "Supported export file formats.", - "enum": [ - "jsonl", - "csv", - "parquet", - "zip" - ], - "title": "ExportFormat", - "type": "string" - }, - "ExportListResponse": { - "description": "Paginated list of export jobs.", - "properties": { - "data": { - "items": {}, - "title": "Data", - "type": "array" + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Model provider identifier", + "title": "Provider" }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse" - } - }, - "required": [ - "data", - "pagination" - ], - "title": "ExportListResponse", - "type": "object" - }, - "GenerateAgentStepsRequest": { - "properties": { - "agent_description": { + "speed": { "anyOf": [ { "type": "string" @@ -4570,15 +4427,14 @@ "type": "null" } ], - "description": "Agent description for additional AI context.", - "title": "Agent Description" + "description": "Model processing speed", + "title": "Speed" }, - "agent_steps": { + "supported_input_media": { "anyOf": [ { "items": { - "additionalProperties": true, - "type": "object" + "type": "string" }, "type": "array" }, @@ -4586,16 +4442,25 @@ "type": "null" } ], - "description": "Current agent step hierarchy for context when modifying.", - "title": "Agent Steps" + "description": "Modalities the embedder accepts on input (short kinds like text / image / video, or full MIMEs). null means text-only. A source only honours a media_types entry its embedder lists here.", + "title": "Supported Input Media" }, - "mode": { - "default": "generate_full", - "description": "'generate_full' to create from scratch, 'modify_workflow' to refine.", - "title": "Mode", - "type": "string" + "supported_languages": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Supported languages", + "title": "Supported Languages" }, - "trigger_type": { + "url": { "anyOf": [ { "type": "string" @@ -4604,50 +4469,58 @@ "type": "null" } ], - "description": "Agent trigger type for context (e.g. 'dynamic_input', 'content_added').", - "title": "Trigger Type" + "description": "Model documentation URL", + "title": "Url" + } + }, + "required": [ + "model_id", + "model_type", + "dimensions", + "credits" + ], + "title": "EmbeddingModelResponse", + "type": "object" + }, + "EmbeddingStorageCreditsResponse": { + "description": "Monthly storage credits per stored record at a dimension count.", + "properties": { + "credits": { + "description": "Credits per record per month", + "title": "Credits", + "type": "integer" }, - "user_input": { - "description": "Natural language description of the desired agent workflow.", - "title": "User Input", - "type": "string" + "dimensions": { + "description": "Number of embedding dimensions", + "title": "Dimensions", + "type": "integer" } }, "required": [ - "user_input" + "dimensions", + "credits" ], - "title": "GenerateAgentStepsRequest", + "title": "EmbeddingStorageCreditsResponse", "type": "object" }, - "GenerateAgentStepsResponse": { + "EvaluationCriteriaResponse": { + "description": "Response schema for evaluation criteria.", "properties": { - "agent_config": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Suggested agent-level configuration, if any.", - "title": "Agent Config" + "account_id": { + "format": "uuid", + "title": "Account Id", + "type": "string" }, - "conversation_id": { - "description": "Conversation turn ID for tracking.", - "title": "Conversation Id", + "agent_id": { + "format": "uuid", + "title": "Agent Id", "type": "string" }, - "example_prompts": { - "description": "Example natural-language prompts that demonstrate the capabilities of this AI assistant for the given mode.", - "items": { - "$ref": "#/components/schemas/ExamplePrompt" - }, - "title": "Example Prompts", - "type": "array" + "created_at": { + "title": "Created At", + "type": "string" }, - "intent_assessment": { + "description": { "anyOf": [ { "type": "string" @@ -4656,408 +4529,331 @@ "type": "null" } ], - "description": "How the assistant interpreted the request: 'clear' when steps were generated, or an ask-path value (e.g. 'ambiguous_output', 'cannot_build') when it returned no steps and put a clarifying question or blocker in `note`. Mirrors the MCP surface so callers can distinguish a clarification pause from a hard failure.", - "title": "Intent Assessment" + "title": "Description" }, - "note": { - "description": "AI explanation of the proposed workflow.", - "title": "Note", - "type": "string" + "enabled": { + "title": "Enabled", + "type": "boolean" }, - "steps": { - "description": "Generated agent steps.", - "items": { - "additionalProperties": true, - "type": "object" - }, - "title": "Steps", - "type": "array" + "evaluation_mode": { + "description": "Runtime behavior mode. output_expectation (manual validation), eval_and_retry (every run + retry), sample_and_flag (sampled monitoring).", + "title": "Evaluation Mode", + "type": "string" }, - "success": { - "description": "Whether steps were successfully generated.", - "title": "Success", - "type": "boolean" - } - }, - "required": [ - "conversation_id", - "steps", - "note", - "success" - ], - "title": "GenerateAgentStepsResponse", - "type": "object" - }, - "GenerateStepConfigRequest": { - "properties": { - "agent_steps": { + "evaluation_prompt": { "anyOf": [ { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "description": "Current agent step hierarchy for context.", - "title": "Agent Steps" + "title": "Evaluation Prompt" }, - "current_config": { + "evaluation_tier": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Current step configuration to refine, if any.", - "title": "Current Config" + "title": "Evaluation Tier" }, - "step_id": { + "expectation_config": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "ID of the specific step to refine. Omit for new steps.", - "title": "Step Id" + "title": "Expectation Config" }, - "step_type": { - "description": "The step type to generate config for (e.g. 'regex_replace', 'gate', 'text', 'prompt_call', 'retrieval').", - "title": "Step Type", + "id": { + "format": "uuid", + "title": "Id", "type": "string" }, - "user_input": { - "description": "Natural language description of what the step should do.", - "title": "User Input", - "type": "string" - } - }, - "required": [ - "step_type", - "user_input" - ], - "title": "GenerateStepConfigRequest", - "type": "object" - }, - "GenerateStepConfigResponse": { - "properties": { - "conversation_id": { - "description": "Conversation turn ID for tracking.", - "title": "Conversation Id", - "type": "string" + "max_retries": { + "title": "Max Retries", + "type": "integer" }, - "example_prompts": { - "description": "Example natural-language prompts that demonstrate the capabilities of this AI assistant for the given step type.", - "items": { - "$ref": "#/components/schemas/ExamplePrompt" + "pass_threshold": { + "description": "Score cutoff for pass/fail, inclusive (0.0 to 1.0).", + "maximum": 1.0, + "minimum": 0.0, + "title": "Pass Threshold", + "type": "number" + }, + "result_summary": { + "additionalProperties": { + "type": "integer" }, - "title": "Example Prompts", - "type": "array" + "title": "Result Summary", + "type": "object" }, - "note": { - "description": "AI explanation of the proposed configuration.", - "title": "Note", - "type": "string" + "retry_on_failure": { + "title": "Retry On Failure", + "type": "boolean" }, - "resulting_config": { + "step_id": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "The proposed step configuration.", - "title": "Resulting Config" + "title": "Step Id" }, - "step_type": { - "description": "The step type that was generated.", - "title": "Step Type", + "updated_at": { + "title": "Updated At", "type": "string" - }, - "success": { - "description": "Whether a valid configuration was generated.", - "title": "Success", - "type": "boolean" } }, "required": [ - "conversation_id", - "step_type", - "note", - "success" + "id", + "agent_id", + "account_id", + "description", + "evaluation_mode", + "enabled", + "step_id", + "expectation_config", + "max_retries", + "retry_on_failure", + "evaluation_prompt", + "pass_threshold", + "evaluation_tier", + "created_at", + "updated_at", + "result_summary" ], - "title": "GenerateStepConfigResponse", + "title": "EvaluationCriteriaResponse", "type": "object" }, - "GenerationTierListResponse": { - "description": "``GET /models/generation-tiers`` legacy/default shape; 2026-07-27+ clients\nget the canonical ``{data, pagination}`` envelope.", + "EvaluationResultListResponse": { + "description": "Paginated list of evaluation results.", "properties": { - "tiers": { + "data": { "items": { - "$ref": "#/components/schemas/GenerationTierResponse" + "$ref": "#/components/schemas/EvaluationResultResponse" }, - "title": "Tiers", + "title": "Data", "type": "array" + }, + "limit": { + "title": "Limit", + "type": "integer" + }, + "page": { + "title": "Page", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" } }, "required": [ - "tiers" + "data", + "total", + "page", + "limit" ], - "title": "GenerationTierListResponse", + "title": "EvaluationResultListResponse", "type": "object" }, - "GenerationTierResponse": { + "EvaluationResultResponse": { + "description": "Response schema for a single evaluation result.", "properties": { - "credits_per_unit": { + "agent_run_id": { + "format": "uuid", + "title": "Agent Run Id", + "type": "string" + }, + "agent_step_run_id": { "anyOf": [ { - "type": "integer" + "format": "uuid", + "type": "string" }, { "type": "null" } ], - "title": "Credits Per Unit" - }, - "modality": { - "title": "Modality", - "type": "string" + "title": "Agent Step Run Id" }, - "model_id": { - "title": "Model Id", + "created_at": { + "title": "Created At", "type": "string" }, - "model_name": { - "title": "Model Name", + "criteria_id": { + "format": "uuid", + "title": "Criteria Id", "type": "string" }, - "price_label": { + "details": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Price Label" + "description": "Evaluation details including explanation and raw LLM response.", + "title": "Details" }, - "tier": { - "title": "Tier", + "evaluated_at": { + "title": "Evaluated At", "type": "string" }, - "unit_label": { + "flagged": { + "description": "True when the result was flagged for human review.", + "title": "Flagged", + "type": "boolean" + }, + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + }, + "retry_count": { + "title": "Retry Count", + "type": "integer" + }, + "retry_triggered": { + "title": "Retry Triggered", + "type": "boolean" + }, + "score": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "title": "Unit Label" + "description": "LLM-assigned quality score between 0.0 (worst) and 1.0 (best).", + "title": "Score" + }, + "status": { + "description": "Outcome status: pending, passed, failed, skipped, or error.", + "title": "Status", + "type": "string" } }, "required": [ - "modality", - "tier", - "model_id", - "model_name", - "credits_per_unit", - "unit_label", - "price_label" + "id", + "criteria_id", + "agent_run_id", + "agent_step_run_id", + "status", + "retry_triggered", + "retry_count", + "flagged", + "evaluated_at", + "created_at" ], - "title": "GenerationTierResponse", + "title": "EvaluationResultResponse", "type": "object" }, - "GovernanceAiAcceptResponse": { - "description": "Response from accepting a governance AI assistant plan.", + "EvaluationResultSummaryResponse": { + "description": "Aggregated pass/fail/error counts and average score for a criteria.", "properties": { - "actions_applied": { - "description": "Results of each action that was executed.", - "items": { - "$ref": "#/components/schemas/AppliedActionResponse" - }, - "title": "Actions Applied", - "type": "array" - }, - "conversation_id": { - "description": "Conversation ID that was accepted.", - "title": "Conversation Id", - "type": "string" - }, - "error": { + "average_score": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Overall error message if the plan failed, or null.", - "title": "Error" + "description": "Mean score across all evaluated results, or null if none.", + "title": "Average Score" }, - "success": { - "description": "Whether all actions were applied successfully.", - "title": "Success", - "type": "boolean" + "error": { + "title": "Error", + "type": "integer" + }, + "failed": { + "title": "Failed", + "type": "integer" + }, + "flagged": { + "title": "Flagged", + "type": "integer" + }, + "passed": { + "title": "Passed", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" } }, "required": [ - "conversation_id", - "actions_applied", - "success" - ], - "title": "GovernanceAiAcceptResponse", - "type": "object" - }, - "GovernanceAiAssistantResponse": { - "description": "Response from the governance AI assistant generate endpoint.", - "properties": { - "conversation_id": { - "description": "Conversation ID to accept or decline this plan.", - "title": "Conversation Id", - "type": "string" - }, - "example_prompts": { - "description": "Example natural-language prompts that demonstrate the capabilities of the governance AI assistant.", - "items": { - "$ref": "#/components/schemas/ExamplePrompt" - }, - "title": "Example Prompts", - "type": "array" - }, - "note": { - "description": "AI-generated summary of the proposed changes.", - "title": "Note", - "type": "string" - }, - "prompt_call_id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Prompt call ID for credit tracking, or null.", - "title": "Prompt Call Id" - }, - "proposed_actions": { - "description": "Ordered list of policy actions the AI proposes to execute.", - "items": { - "$ref": "#/components/schemas/ProposedPolicyActionResponse" - }, - "title": "Proposed Actions", - "type": "array" - }, - "success": { - "description": "Whether the plan was generated successfully.", - "title": "Success", - "type": "boolean" - } - }, - "required": [ - "conversation_id", - "note", - "proposed_actions", - "success" + "total", + "passed", + "failed", + "error", + "flagged" ], - "title": "GovernanceAiAssistantResponse", + "title": "EvaluationResultSummaryResponse", "type": "object" }, - "HTTPValidationError": { + "EvaluationResultWithCriteriaListResponse": { + "description": "Paginated list of evaluation results with criteria context.", "properties": { - "detail": { + "data": { "items": { - "$ref": "#/components/schemas/ValidationError" + "$ref": "#/components/schemas/EvaluationResultWithCriteriaResponse" }, - "title": "Detail", + "title": "Data", "type": "array" - } - }, - "title": "HTTPValidationError", - "type": "object" - }, - "ImportFieldErrorModel": { - "description": "Single agent_definition validation error with source position.", - "properties": { - "column": { - "description": "1-indexed column in `source`.", - "title": "Column", - "type": "integer" }, - "line": { - "description": "1-indexed line in `source`.", - "title": "Line", + "limit": { + "title": "Limit", "type": "integer" }, - "message": { - "description": "Human-readable description of the problem.", - "title": "Message", - "type": "string" + "page": { + "title": "Page", + "type": "integer" }, - "path": { - "description": "Dotted path of the offending field, e.g. `agent.definition.child_steps[0].step_type`.", - "title": "Path", - "type": "string" + "total": { + "title": "Total", + "type": "integer" } }, "required": [ - "line", - "column", - "path", - "message" + "data", + "total", + "page", + "limit" ], - "title": "ImportFieldErrorModel", + "title": "EvaluationResultWithCriteriaListResponse", "type": "object" }, - "ImportSkipResponse": { - "description": "One item that was not applied during an agent import.\n\nUsed as the element type for ``import_warnings`` on every\nresponse model that accepts an ``agent_definition`` payload.\nSee ``services.agent_definition_import.AgentImportSkip`` for the\nfull category list.\n\nLives here (not on each router) so the authenticated and public\nAPI responses share one definition \u2014 keeping the shape that\nclients (UI modal, MCP, OpenAPI consumers) depend on aligned.", + "EvaluationResultWithCriteriaResponse": { + "description": "Evaluation result including criteria context for aggregated listing.", "properties": { - "category": { - "description": "The kind of item that was skipped or substituted: 'schedule', 'evaluation_criteria', 'alert_config', 'alert_recipient', 'governance_policy', 'governance_kb_link', 'solution_link'.", - "title": "Category", + "agent_run_id": { + "format": "uuid", + "title": "Agent Run Id", "type": "string" }, - "details": { - "additionalProperties": true, - "description": "Category-specific identifiers for the skipped item (step_id, alert_type, kb_name, etc.). Stable keys per category; absent keys are simply not applicable.", - "title": "Details", - "type": "object" - }, - "message": { - "description": "Human-readable explanation of what was skipped and why.", - "title": "Message", - "type": "string" - } - }, - "required": [ - "category", - "message" - ], - "title": "ImportSkipResponse", - "type": "object" - }, - "InboundEmailRejectionResponse": { - "description": "An inbound email that was discarded without running an agent.", - "properties": { - "agent_id": { + "agent_step_run_id": { "anyOf": [ { "format": "uuid", @@ -5067,52 +4863,81 @@ "type": "null" } ], - "title": "Agent Id" + "title": "Agent Step Run Id" }, "created_at": { "title": "Created At", "type": "string" }, - "id": { + "criteria_description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Criteria Description" + }, + "criteria_id": { "format": "uuid", - "title": "Id", + "title": "Criteria Id", "type": "string" }, - "message_id": { + "details": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Message Id" + "description": "Evaluation details including explanation and raw LLM response.", + "title": "Details" }, - "reason": { - "title": "Reason", + "evaluated_at": { + "title": "Evaluated At", "type": "string" }, - "recipient": { - "title": "Recipient", - "type": "string" + "flagged": { + "description": "True when the result was flagged for human review.", + "title": "Flagged", + "type": "boolean" }, - "sender": { - "title": "Sender", + "id": { + "format": "uuid", + "title": "Id", "type": "string" }, - "sender_ip": { + "retry_count": { + "title": "Retry Count", + "type": "integer" + }, + "retry_triggered": { + "title": "Retry Triggered", + "type": "boolean" + }, + "score": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "title": "Sender Ip" + "description": "LLM-assigned quality score between 0.0 (worst) and 1.0 (best).", + "title": "Score" }, - "subject": { + "status": { + "description": "Outcome status: pending, passed, failed, skipped, or error.", + "title": "Status", + "type": "string" + }, + "step_id": { "anyOf": [ { "type": "string" @@ -5121,45 +4946,146 @@ "type": "null" } ], - "title": "Subject" + "title": "Step Id" } }, "required": [ "id", + "criteria_id", + "agent_run_id", + "agent_step_run_id", + "status", + "retry_triggered", + "retry_count", + "flagged", + "evaluated_at", "created_at", - "recipient", - "sender", - "sender_ip", - "reason", - "message_id", - "agent_id", - "subject" + "step_id", + "criteria_description" ], - "title": "InboundEmailRejectionResponse", + "title": "EvaluationResultWithCriteriaResponse", "type": "object" }, - "InboundEmailStatusResponse": { + "EvaluationRunSummaryListResponse": { + "description": "Paginated list of per-run evaluation summaries.", "properties": { - "paused": { - "title": "Paused", - "type": "boolean" + "data": { + "items": { + "$ref": "#/components/schemas/EvaluationRunSummaryResponse" + }, + "title": "Data", + "type": "array" }, - "queued_backlog": { - "title": "Queued Backlog", + "limit": { + "title": "Limit", + "type": "integer" + }, + "page": { + "title": "Page", + "type": "integer" + }, + "total": { + "title": "Total", "type": "integer" } }, "required": [ - "paused", - "queued_backlog" - ], - "title": "InboundEmailStatusResponse", + "data", + "total", + "page", + "limit" + ], + "title": "EvaluationRunSummaryListResponse", "type": "object" }, - "InlineTextReplaceRequest": { - "description": "Request model for inline text content replacement.", + "EvaluationRunSummaryResponse": { + "description": "Per-run evaluation summary with pass/fail/error breakdown.", "properties": { - "content_type": { + "agent_run_id": { + "format": "uuid", + "title": "Agent Run Id", + "type": "string" + }, + "error_count": { + "title": "Error Count", + "type": "integer" + }, + "failed_count": { + "title": "Failed Count", + "type": "integer" + }, + "flagged_count": { + "title": "Flagged Count", + "type": "integer" + }, + "passed_count": { + "title": "Passed Count", + "type": "integer" + }, + "run_created_at": { + "title": "Run Created At", + "type": "string" + }, + "run_status": { + "description": "Status of the agent run (processing, completed, failed).", + "title": "Run Status", + "type": "string" + }, + "skipped_count": { + "title": "Skipped Count", + "type": "integer" + }, + "total_evaluations": { + "title": "Total Evaluations", + "type": "integer" + } + }, + "required": [ + "agent_run_id", + "run_status", + "run_created_at", + "total_evaluations", + "passed_count", + "failed_count", + "error_count", + "skipped_count", + "flagged_count" + ], + "title": "EvaluationRunSummaryResponse", + "type": "object" + }, + "EvaluationStatus": { + "description": "Result status of a single evaluation run.", + "enum": [ + "pending", + "passed", + "failed", + "skipped", + "error" + ], + "title": "EvaluationStatus", + "type": "string" + }, + "ExamplePrompt": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "ExecutedActionResponse": { + "description": "A single executed action result.", + "properties": { + "action_type": { + "description": "Type of the executed action.", + "title": "Action Type", + "type": "string" + }, + "description": { + "description": "Human-readable description.", + "title": "Description", + "type": "string" + }, + "error": { "anyOf": [ { "type": "string" @@ -5168,29 +5094,28 @@ "type": "null" } ], - "default": "text/plain", - "description": "MIME type for the text content", - "title": "Content Type" + "description": "Error message if failed.", + "title": "Error" }, - "metadata": { + "needs_clarification": { + "default": false, + "description": "True when the action paused for a clarifying question rather than failing. The created resource is kept and the question is in ``description``/``error``.", + "title": "Needs Clarification", + "type": "boolean" + }, + "resource_id": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Optional metadata object", - "title": "Metadata" - }, - "text": { - "description": "Text content to upload", - "title": "Text", - "type": "string" + "description": "ID of the affected resource.", + "title": "Resource Id" }, - "title": { + "resource_type": { "anyOf": [ { "type": "string" @@ -5199,20 +5124,26 @@ "type": "null" } ], - "description": "Optional title", - "title": "Title" + "description": "Type of the affected resource.", + "title": "Resource Type" + }, + "success": { + "default": true, + "description": "Whether the action succeeded.", + "title": "Success", + "type": "boolean" } }, "required": [ - "text" + "action_type", + "description" ], - "title": "InlineTextReplaceRequest", + "title": "ExecutedActionResponse", "type": "object" }, - "InlineTextUploadRequest": { - "description": "Request model for inline text uploads.", + "ExperimentDetailResponse": { "properties": { - "content_type": { + "completed_at": { "anyOf": [ { "type": "string" @@ -5221,29 +5152,40 @@ "type": "null" } ], - "default": "text/plain", - "description": "MIME type for the text content", - "title": "Content Type" + "title": "Completed At" }, - "metadata": { + "created_at": { + "title": "Created At", + "type": "string" + }, + "effort": { + "additionalProperties": { + "type": "string" + }, + "description": "The reasoning effort each model was run at, by model ID.", + "title": "Effort", + "type": "object" + }, + "error_message": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Optional metadata object", - "title": "Metadata" + "title": "Error Message" }, - "text": { - "description": "Text content to upload", - "title": "Text", + "evaluation_complexity": { + "title": "Evaluation Complexity", "type": "string" }, - "title": { + "evaluation_mode": { + "title": "Evaluation Mode", + "type": "string" + }, + "evaluator_model_id": { "anyOf": [ { "type": "string" @@ -5252,127 +5194,50 @@ "type": "null" } ], - "description": "Optional title", - "title": "Title" - } - }, - "required": [ - "text" - ], - "title": "InlineTextUploadRequest", - "type": "object" - }, - "InsufficientCreditsDetail": { - "description": "``detail`` body for a 402 ``insufficient_credits`` response.", - "properties": { - "account_id": { - "description": "UUID of the account that ran out of credits.", - "title": "Account Id", - "type": "string" + "title": "Evaluator Model Id" }, - "error": { - "const": "insufficient_credits", - "description": "Stable machine-readable error code.", - "title": "Error", + "id": { + "title": "Id", "type": "string" }, - "message": { - "description": "Human-readable explanation.", - "title": "Message", - "type": "string" - } - }, - "required": [ - "error", - "message", - "account_id" - ], - "title": "InsufficientCreditsDetail", - "type": "object" - }, - "InsufficientCreditsResponse": { - "description": "402 envelope returned when the account has exhausted its credits.", - "properties": { - "detail": { - "$ref": "#/components/schemas/InsufficientCreditsDetail" - } - }, - "required": [ - "detail" - ], - "title": "InsufficientCreditsResponse", - "type": "object" - }, - "JsonValue": {}, - "KnowledgeBaseListResponseModel": { - "description": "Paginated list of knowledge bases.", - "properties": { - "knowledge_bases": { - "description": "List of knowledge bases on this page.", - "items": { - "$ref": "#/components/schemas/KnowledgeBaseResponseModel" - }, - "title": "Knowledge Bases", - "type": "array" + "include_step_output_in_evaluation": { + "title": "Include Step Output In Evaluation", + "type": "boolean" }, - "limit": { - "description": "Items per page.", - "title": "Limit", - "type": "integer" + "json_template": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Json Template" }, - "page": { - "description": "Current page number (1-based).", - "title": "Page", - "type": "integer" - }, - "total": { - "description": "Total number of knowledge bases.", - "title": "Total", - "type": "integer" - } - }, - "required": [ - "knowledge_bases", - "page", - "limit", - "total" - ], - "title": "KnowledgeBaseListResponseModel", - "type": "object" - }, - "KnowledgeBaseResponseModel": { - "description": "Response model for a single knowledge base.", - "properties": { - "created_at": { - "description": "ISO-8601 creation timestamp.", - "title": "Created At", - "type": "string" - }, - "default_score_threshold": { + "progress_current": { "anyOf": [ { - "type": "number" + "type": "integer" }, { "type": "null" } ], - "description": "Default minimum rerank score.", - "title": "Default Score Threshold" + "title": "Progress Current" }, - "default_top_k": { + "progress_message": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Default results after reranking.", - "title": "Default Top K" + "title": "Progress Message" }, - "default_top_n": { + "progress_total": { "anyOf": [ { "type": "integer" @@ -5381,38 +5246,43 @@ "type": "null" } ], - "description": "Default number of results to return.", - "title": "Default Top N" + "title": "Progress Total" }, - "description": { + "prompt": { + "title": "Prompt", + "type": "string" + }, + "result_data": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Optional description.", - "title": "Description" - }, - "id": { - "description": "Unique knowledge base identifier.", - "title": "Id", - "type": "string" + "title": "Result Data" }, - "name": { - "description": "Human-readable name.", - "title": "Name", - "type": "string" + "selected_model_ids": { + "items": { + "type": "string" + }, + "title": "Selected Model Ids", + "type": "array" }, - "readonly": { - "default": false, - "description": "Whether the knowledge base is read-only.", - "title": "Readonly", - "type": "boolean" + "selected_step_output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Selected Step Output" }, - "reranker_model": { + "started_at": { "anyOf": [ { "type": "string" @@ -5421,134 +5291,171 @@ "type": "null" } ], - "description": "Reranker model in use.", - "title": "Reranker Model" + "title": "Started At" }, - "sources": { - "description": "Linked source connections.", - "items": { - "$ref": "#/components/schemas/SourceConnectionResponseModel" - }, - "title": "Sources", - "type": "array" + "status": { + "title": "Status", + "type": "string" }, - "updated_at": { - "description": "ISO-8601 last-update timestamp.", - "title": "Updated At", + "system_prompt": { + "title": "System Prompt", "type": "string" } }, "required": [ "id", - "name", + "status", "created_at", - "updated_at" + "selected_model_ids", + "evaluation_mode", + "evaluation_complexity", + "prompt", + "system_prompt", + "evaluator_model_id", + "include_step_output_in_evaluation", + "selected_step_output", + "json_template", + "started_at", + "completed_at", + "error_message", + "progress_current", + "progress_total", + "progress_message", + "result_data" ], - "title": "KnowledgeBase", + "title": "ExperimentDetailResponse", "type": "object" }, - "LinkResourcesRequest": { + "ExperimentListResponse": { + "description": "``GET /models/playground/experiments`` legacy/default shape; 2026-07-27+\nclients get the canonical ``{data, pagination}`` envelope.", "properties": { - "ids": { - "description": "Resource IDs to link", + "experiments": { "items": { - "format": "uuid", - "type": "string" + "$ref": "#/components/schemas/ExperimentSummaryResponse" }, - "minItems": 1, - "title": "Ids", + "title": "Experiments", "type": "array" + }, + "total": { + "title": "Total", + "type": "integer" } }, "required": [ - "ids" + "experiments", + "total" ], - "title": "LinkResourcesRequest", + "title": "ExperimentListResponse", "type": "object" }, - "MarkAiSuggestionRequest": { + "ExperimentSummaryResponse": { "properties": { - "accepted": { - "description": "True to accept the suggestion, false to decline it.", - "title": "Accepted", - "type": "boolean" + "created_at": { + "title": "Created At", + "type": "string" + }, + "evaluation_complexity": { + "title": "Evaluation Complexity", + "type": "string" + }, + "evaluation_mode": { + "title": "Evaluation Mode", + "type": "string" + }, + "id": { + "title": "Id", + "type": "string" + }, + "selected_model_ids": { + "items": { + "type": "string" + }, + "title": "Selected Model Ids", + "type": "array" + }, + "status": { + "title": "Status", + "type": "string" } }, "required": [ - "accepted" + "id", + "status", + "created_at", + "selected_model_ids", + "evaluation_mode", + "evaluation_complexity" ], - "title": "MarkAiSuggestionRequest", + "title": "ExperimentSummaryResponse", "type": "object" }, - "MarkConversationTurnRequest": { - "properties": { - "accepted": { - "description": "Whether the suggestion was accepted", - "title": "Accepted", - "type": "boolean" - } - }, - "required": [ - "accepted" + "ExportFormat": { + "description": "Supported export file formats.", + "enum": [ + "jsonl", + "csv", + "parquet", + "zip" ], - "title": "MarkConversationTurnRequest", - "type": "object" + "title": "ExportFormat", + "type": "string" }, - "MeResponse": { + "ExportListResponse": { + "description": "Paginated list of export jobs.", "properties": { - "account_id": { - "format": "uuid", - "title": "Account Id", - "type": "string" - }, - "organizations": { - "items": { - "$ref": "#/components/schemas/OrganizationInfoResponse" - }, - "title": "Organizations", + "data": { + "items": {}, + "title": "Data", "type": "array" + }, + "pagination": { + "$ref": "#/components/schemas/PaginationResponse" } }, "required": [ - "account_id", - "organizations" + "data", + "pagination" ], - "title": "MeResponse", + "title": "ExportListResponse", "type": "object" }, - "MemoryBankAiAssistantResponse": { - "description": "Response from the memory bank AI assistant.", + "GenerateAgentStepsRequest": { "properties": { - "config": { + "agent_description": { "anyOf": [ { - "$ref": "#/components/schemas/MemoryBankConfigResponse" + "type": "string" }, { "type": "null" } ], - "description": "Proposed configuration, or null." - }, - "conversation_id": { - "description": "Conversation ID for follow-up.", - "title": "Conversation Id", - "type": "string" - }, - "example_prompts": { - "description": "Example natural-language prompts that demonstrate the capabilities of the memory bank AI assistant.", - "items": { - "$ref": "#/components/schemas/ExamplePrompt" - }, - "title": "Example Prompts", - "type": "array" + "description": "Agent description for additional AI context.", + "title": "Agent Description" }, - "note": { - "description": "AI-generated explanation.", - "title": "Note", + "agent_steps": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Current agent step hierarchy for context when modifying.", + "title": "Agent Steps" + }, + "mode": { + "default": "generate_full", + "description": "'generate_full' to create from scratch, 'modify_workflow' to refine.", + "title": "Mode", "type": "string" }, - "prompt_call_id": { + "trigger_type": { "anyOf": [ { "type": "string" @@ -5557,39 +5464,50 @@ "type": "null" } ], - "description": "Prompt call ID for credit tracking.", - "title": "Prompt Call Id" + "description": "Agent trigger type for context (e.g. 'dynamic_input', 'content_added').", + "title": "Trigger Type" }, - "success": { - "default": false, - "description": "Whether generation succeeded.", - "title": "Success", - "type": "boolean" + "user_input": { + "description": "Natural language description of the desired agent workflow.", + "title": "User Input", + "type": "string" } }, "required": [ - "conversation_id", - "note" + "user_input" ], - "title": "MemoryBankAiAssistantResponse", + "title": "GenerateAgentStepsRequest", "type": "object" }, - "MemoryBankConfigResponse": { - "description": "Suggested memory bank configuration from the AI assistant.", + "GenerateAgentStepsResponse": { "properties": { - "compaction_prompt": { + "agent_config": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Suggested compaction prompt.", - "title": "Compaction Prompt" + "description": "Suggested agent-level configuration, if any.", + "title": "Agent Config" }, - "description": { + "conversation_id": { + "description": "Conversation turn ID for tracking.", + "title": "Conversation Id", + "type": "string" + }, + "example_prompts": { + "description": "Example natural-language prompts that demonstrate the capabilities of this AI assistant for the given mode.", + "items": { + "$ref": "#/components/schemas/ExamplePrompt" + }, + "title": "Example Prompts", + "type": "array" + }, + "intent_assessment": { "anyOf": [ { "type": "string" @@ -5598,133 +5516,172 @@ "type": "null" } ], - "description": "Suggested description.", - "title": "Description" + "description": "How the assistant interpreted the request: 'clear' when steps were generated, or an ask-path value (e.g. 'ambiguous_output', 'cannot_build') when it returned no steps and put a clarifying question or blocker in `note`. Mirrors the MCP surface so callers can distinguish a clarification pause from a hard failure.", + "title": "Intent Assessment" }, - "max_age_days": { + "note": { + "description": "AI explanation of the proposed workflow.", + "title": "Note", + "type": "string" + }, + "steps": { + "description": "Generated agent steps.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Steps", + "type": "array" + }, + "success": { + "description": "Whether steps were successfully generated.", + "title": "Success", + "type": "boolean" + } + }, + "required": [ + "conversation_id", + "steps", + "note", + "success" + ], + "title": "GenerateAgentStepsResponse", + "type": "object" + }, + "GenerateStepConfigRequest": { + "properties": { + "agent_steps": { "anyOf": [ { - "type": "integer" + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" }, { "type": "null" } ], - "description": "Max age in days.", - "title": "Max Age Days" + "description": "Current agent step hierarchy for context.", + "title": "Agent Steps" }, - "max_size_tokens": { + "current_config": { "anyOf": [ { - "type": "integer" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Max size in tokens.", - "title": "Max Size Tokens" + "description": "Current step configuration to refine, if any.", + "title": "Current Config" }, - "max_turns": { + "step_id": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Max conversation turns.", - "title": "Max Turns" + "description": "ID of the specific step to refine. Omit for new steps.", + "title": "Step Id" }, - "mode": { - "description": "Memory bank mode.", - "title": "Mode", + "step_type": { + "description": "The step type to generate config for (e.g. 'regex_replace', 'gate', 'text', 'prompt_call', 'retrieval').", + "title": "Step Type", "type": "string" }, - "name": { - "description": "Suggested name.", - "title": "Name", + "user_input": { + "description": "Natural language description of what the step should do.", + "title": "User Input", + "type": "string" + } + }, + "required": [ + "step_type", + "user_input" + ], + "title": "GenerateStepConfigRequest", + "type": "object" + }, + "GenerateStepConfigResponse": { + "properties": { + "conversation_id": { + "description": "Conversation turn ID for tracking.", + "title": "Conversation Id", "type": "string" }, - "retention_days": { + "example_prompts": { + "description": "Example natural-language prompts that demonstrate the capabilities of this AI assistant for the given step type.", + "items": { + "$ref": "#/components/schemas/ExamplePrompt" + }, + "title": "Example Prompts", + "type": "array" + }, + "note": { + "description": "AI explanation of the proposed configuration.", + "title": "Note", + "type": "string" + }, + "resulting_config": { "anyOf": [ { - "type": "integer" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Retention in days.", - "title": "Retention Days" + "description": "The proposed step configuration.", + "title": "Resulting Config" }, - "type": { - "description": "Memory bank type: conversation or general.", - "title": "Type", + "step_type": { + "description": "The step type that was generated.", + "title": "Step Type", "type": "string" + }, + "success": { + "description": "Whether a valid configuration was generated.", + "title": "Success", + "type": "boolean" } }, "required": [ - "name", - "type", - "mode" + "conversation_id", + "step_type", + "note", + "success" ], - "title": "MemoryBankConfigResponse", + "title": "GenerateStepConfigResponse", "type": "object" }, - "MemoryBankListResponseModel": { - "description": "Paginated list of memory banks.", + "GenerationTierListResponse": { + "description": "``GET /models/generation-tiers`` legacy/default shape; 2026-07-27+ clients\nget the canonical ``{data, pagination}`` envelope.", "properties": { - "limit": { - "description": "Items per page.", - "title": "Limit", - "type": "integer" - }, - "memory_banks": { - "description": "List of memory banks on this page.", + "tiers": { "items": { - "$ref": "#/components/schemas/MemoryBankResponseModel" + "$ref": "#/components/schemas/GenerationTierResponse" }, - "title": "Memory Banks", + "title": "Tiers", "type": "array" - }, - "page": { - "description": "Current page number (1-based).", - "title": "Page", - "type": "integer" - }, - "total": { - "description": "Total number of memory banks.", - "title": "Total", - "type": "integer" } }, "required": [ - "memory_banks", - "page", - "limit", - "total" + "tiers" ], - "title": "MemoryBankListResponseModel", + "title": "GenerationTierListResponse", "type": "object" }, - "MemoryBankResponseModel": { - "description": "Response model for a single memory bank.", + "GenerationTierResponse": { "properties": { - "chunk_overlap": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Character overlap between chunks.", - "title": "Chunk Overlap" - }, - "chunk_size": { + "credits_per_unit": { "anyOf": [ { "type": "integer" @@ -5733,51 +5690,21 @@ "type": "null" } ], - "description": "Characters per chunk.", - "title": "Chunk Size" + "title": "Credits Per Unit" }, - "compaction_prompt": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Custom prompt used when compacting older entries. When set, entries that exceed a threshold are summarized into a new entry before being soft-deleted.", - "title": "Compaction Prompt" - }, - "created_at": { - "description": "ISO-8601 creation timestamp.", - "title": "Created At", + "modality": { + "title": "Modality", "type": "string" }, - "description": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Optional description of the memory bank's purpose.", - "title": "Description" + "model_id": { + "title": "Model Id", + "type": "string" }, - "dimensions": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Vector embedding dimensions.", - "title": "Dimensions" + "model_name": { + "title": "Model Name", + "type": "string" }, - "embedding_model": { + "price_label": { "anyOf": [ { "type": "string" @@ -5786,73 +5713,53 @@ "type": "null" } ], - "description": "Embedding model identifier.", - "title": "Embedding Model" + "title": "Price Label" }, - "id": { - "description": "Unique memory bank identifier.", - "title": "Id", + "tier": { + "title": "Tier", "type": "string" }, - "max_age_days": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Max entry age in days before compaction. Checked both inline after each write and by the hourly background sweep.", - "title": "Max Age Days" - }, - "max_size_tokens": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Max total tokens (per partition) before compaction. Checked both inline after each write and by the hourly background sweep.", - "title": "Max Size Tokens" - }, - "max_turns": { + "unit_label": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Max conversation turns (per partition) before compaction. Checked both inline after each write and by the hourly background sweep.", - "title": "Max Turns" - }, - "mode": { - "description": "Embedding mode: fast_and_cheap, balanced, slow_and_thorough, or custom.", - "title": "Mode", - "type": "string" + "title": "Unit Label" + } + }, + "required": [ + "modality", + "tier", + "model_id", + "model_name", + "credits_per_unit", + "unit_label", + "price_label" + ], + "title": "GenerationTierResponse", + "type": "object" + }, + "GovernanceAiAcceptResponse": { + "description": "Response from accepting a governance AI assistant plan.", + "properties": { + "actions_applied": { + "description": "Results of each action that was executed.", + "items": { + "$ref": "#/components/schemas/AppliedActionResponse" + }, + "title": "Actions Applied", + "type": "array" }, - "name": { - "description": "Human-readable name.", - "title": "Name", + "conversation_id": { + "description": "Conversation ID that was accepted.", + "title": "Conversation Id", "type": "string" }, - "retention_days": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Content retention period in days (null = indefinite).", - "title": "Retention Days" - }, - "source_connection_id": { + "error": { "anyOf": [ { "type": "string" @@ -5861,204 +5768,177 @@ "type": "null" } ], - "description": "Linked content source ID (null if not yet provisioned).", - "title": "Source Connection Id" - }, - "type": { - "description": "Bank type: conversation (chat-turn with speaker) or general (flat entries).", - "title": "Type", - "type": "string" + "description": "Overall error message if the plan failed, or null.", + "title": "Error" }, - "updated_at": { - "description": "ISO-8601 last-update timestamp.", - "title": "Updated At", - "type": "string" + "success": { + "description": "Whether all actions were applied successfully.", + "title": "Success", + "type": "boolean" } }, "required": [ - "id", - "name", - "type", - "mode", - "created_at", - "updated_at" + "conversation_id", + "actions_applied", + "success" ], - "title": "MemoryBank", + "title": "GovernanceAiAcceptResponse", "type": "object" }, - "ModalityRateResponse": { - "description": "Per-modality rate for an LLM that prices image/audio/video output\n(or input) at a rate distinct from the default text rate.\n\nExample: Gemini 3.1 Flash Image charges $3/1M output tokens for\ntext but $60/1M output tokens for generated images. The image rate\nsurfaces here with ``modality=\"image\"`` and ``output_credits_per_1000_tokens``\nset; the default text rate stays on the parent model fields.", + "GovernanceAiAssistantResponse": { + "description": "Response from the governance AI assistant generate endpoint.", "properties": { - "input_credits_per_1000_tokens": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Input Credits Per 1000 Tokens" + "conversation_id": { + "description": "Conversation ID to accept or decline this plan.", + "title": "Conversation Id", + "type": "string" }, - "modality": { - "title": "Modality", + "example_prompts": { + "description": "Example natural-language prompts that demonstrate the capabilities of the governance AI assistant.", + "items": { + "$ref": "#/components/schemas/ExamplePrompt" + }, + "title": "Example Prompts", + "type": "array" + }, + "note": { + "description": "AI-generated summary of the proposed changes.", + "title": "Note", "type": "string" }, - "output_credits_per_1000_tokens": { + "prompt_call_id": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Output Credits Per 1000 Tokens" - } - }, - "required": [ - "modality" - ], - "title": "ModalityRateResponse", - "type": "object" - }, - "OkResponse": { - "description": "A minimal ``{\"ok\": true}`` acknowledgement for state-mutating actions\nthat have no richer resource to return (e.g. accept/decline a suggestion).", - "properties": { - "ok": { - "title": "Ok", + "description": "Prompt call ID for credit tracking, or null.", + "title": "Prompt Call Id" + }, + "proposed_actions": { + "description": "Ordered list of policy actions the AI proposes to execute.", + "items": { + "$ref": "#/components/schemas/ProposedPolicyActionResponse" + }, + "title": "Proposed Actions", + "type": "array" + }, + "success": { + "description": "Whether the plan was generated successfully.", + "title": "Success", "type": "boolean" } }, "required": [ - "ok" + "conversation_id", + "note", + "proposed_actions", + "success" ], - "title": "OkResponse", + "title": "GovernanceAiAssistantResponse", "type": "object" }, - "OrganizationAlertPreferenceListResponse": { + "HTTPValidationError": { "properties": { - "preferences": { + "detail": { "items": { - "$ref": "#/components/schemas/routers__api__alerts__OrganizationAlertPreferenceResponse" + "$ref": "#/components/schemas/ValidationError" }, - "title": "Preferences", + "title": "Detail", "type": "array" - }, - "total": { - "title": "Total", - "type": "integer" } }, - "required": [ - "preferences", - "total" - ], - "title": "OrganizationAlertPreferenceListResponse", + "title": "HTTPValidationError", "type": "object" }, - "OrganizationInfoResponse": { + "ImportFieldErrorModel": { + "description": "Single agent_definition validation error with source position.", "properties": { - "account_id": { - "format": "uuid", - "title": "Account Id", - "type": "string" + "column": { + "description": "1-indexed column in `source`.", + "title": "Column", + "type": "integer" }, - "id": { - "format": "uuid", - "title": "Id", + "line": { + "description": "1-indexed line in `source`.", + "title": "Line", + "type": "integer" + }, + "message": { + "description": "Human-readable description of the problem.", + "title": "Message", "type": "string" }, - "name": { - "title": "Name", + "path": { + "description": "Dotted path of the offending field, e.g. `agent.definition.child_steps[0].step_type`.", + "title": "Path", "type": "string" } }, "required": [ - "id", - "name", - "account_id" + "line", + "column", + "path", + "message" ], - "title": "OrganizationInfoResponse", + "title": "ImportFieldErrorModel", "type": "object" }, - "PaginationResponse": { - "description": "Pagination information.", + "ImportSkipResponse": { + "description": "One item that was not applied during an agent import.\n\nUsed as the element type for ``import_warnings`` on every\nresponse model that accepts an ``agent_definition`` payload.\nSee ``services.agent_definition_import.AgentImportSkip`` for the\nfull category list.\n\nLives here (not on each router) so the authenticated and public\nAPI responses share one definition \u2014 keeping the shape that\nclients (UI modal, MCP, OpenAPI consumers) depend on aligned.", "properties": { - "has_next": { - "title": "Has Next", - "type": "boolean" - }, - "has_prev": { - "title": "Has Prev", - "type": "boolean" - }, - "limit": { - "title": "Limit", - "type": "integer" - }, - "page": { - "title": "Page", - "type": "integer" + "category": { + "description": "The kind of item that was skipped or substituted: 'schedule', 'evaluation_criteria', 'alert_config', 'alert_recipient', 'governance_policy', 'governance_kb_link', 'solution_link'.", + "title": "Category", + "type": "string" }, - "pages": { - "title": "Pages", - "type": "integer" + "details": { + "additionalProperties": true, + "description": "Category-specific identifiers for the skipped item (step_id, alert_type, kb_name, etc.). Stable keys per category; absent keys are simply not applicable.", + "title": "Details", + "type": "object" }, - "total": { - "title": "Total", - "type": "integer" + "message": { + "description": "Human-readable explanation of what was skipped and why.", + "title": "Message", + "type": "string" } }, "required": [ - "page", - "limit", - "total", - "pages", - "has_next", - "has_prev" + "category", + "message" ], - "title": "PaginationResponse", + "title": "ImportSkipResponse", "type": "object" }, - "PendingProcessingCompletedFailedStatus": { - "enum": [ - "pending", - "processing", - "completed", - "failed", - "queued", - "waiting_human", - "waiting_scheduled" - ], - "title": "PendingProcessingCompletedFailedStatus", - "type": "string" - }, - "PlaygroundCreateRequest": { - "description": "Create a model playground experiment via the public API.", + "InboundEmailRejectionResponse": { + "description": "An inbound email that was discarded without running an agent.", "properties": { - "evaluation_complexity": { - "default": "medium", - "description": "simple, medium, or complex", - "enum": [ - "simple", - "medium", - "complex" + "agent_id": { + "anyOf": [ + { + "format": "uuid", + "type": "string" + }, + { + "type": "null" + } ], - "title": "Evaluation Complexity", + "title": "Agent Id" + }, + "created_at": { + "title": "Created At", "type": "string" }, - "evaluation_mode": { - "default": "manual", - "description": "manual or prompt", - "enum": [ - "manual", - "prompt" - ], - "title": "Evaluation Mode", + "id": { + "format": "uuid", + "title": "Id", "type": "string" }, - "evaluator_model_id": { + "message_id": { "anyOf": [ { "type": "string" @@ -6067,16 +5947,21 @@ "type": "null" } ], - "description": "Evaluator model ID when evaluation_mode is prompt.", - "title": "Evaluator Model Id" + "title": "Message Id" }, - "include_step_output_in_evaluation": { - "default": false, - "description": "Whether to include selected step output as evaluator context.", - "title": "Include Step Output In Evaluation", - "type": "boolean" + "reason": { + "title": "Reason", + "type": "string" }, - "json_template": { + "recipient": { + "title": "Recipient", + "type": "string" + }, + "sender": { + "title": "Sender", + "type": "string" + }, + "sender_ip": { "anyOf": [ { "type": "string" @@ -6085,25 +5970,9 @@ "type": "null" } ], - "description": "Optional JSON template for advanced mode.", - "title": "Json Template" - }, - "model_ids": { - "description": "Selected model IDs (1-10).", - "items": { - "type": "string" - }, - "maxItems": 10, - "minItems": 1, - "title": "Model Ids", - "type": "array" - }, - "prompt": { - "description": "Prompt text for the experiment.", - "title": "Prompt", - "type": "string" + "title": "Sender Ip" }, - "selected_step_output": { + "subject": { "anyOf": [ { "type": "string" @@ -6112,37 +5981,45 @@ "type": "null" } ], - "description": "Optional step output text for evaluator context.", - "title": "Selected Step Output" - }, - "system_prompt": { - "default": "", - "description": "Optional system prompt.", - "title": "System Prompt", - "type": "string" + "title": "Subject" } }, "required": [ - "model_ids", - "prompt" + "id", + "created_at", + "recipient", + "sender", + "sender_ip", + "reason", + "message_id", + "agent_id", + "subject" ], - "title": "PlaygroundCreateRequest", + "title": "InboundEmailRejectionResponse", "type": "object" }, - "PromptModelAutoUpgradeStrategy": { - "enum": [ - "none", - "early_adopter", - "middle_of_road", - "cautious_adopter" + "InboundEmailStatusResponse": { + "properties": { + "paused": { + "title": "Paused", + "type": "boolean" + }, + "queued_backlog": { + "title": "Queued Backlog", + "type": "integer" + } + }, + "required": [ + "paused", + "queued_backlog" ], - "title": "PromptModelAutoUpgradeStrategy", - "type": "string" + "title": "InboundEmailStatusResponse", + "type": "object" }, - "PromptToolResponse": { - "description": "Response model for a prompt tool.", + "InlineTextReplaceRequest": { + "description": "Request model for inline text content replacement.", "properties": { - "description": { + "content_type": { "anyOf": [ { "type": "string" @@ -6151,53 +6028,51 @@ "type": "null" } ], - "title": "Description" + "default": "text/plain", + "description": "MIME type for the text content", + "title": "Content Type" }, - "documentation_url": { + "metadata": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Documentation Url" + "description": "Optional metadata object", + "title": "Metadata" }, - "example": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Example" + "text": { + "description": "Text content to upload", + "title": "Text", + "type": "string" }, - "headers": { + "title": { "anyOf": [ { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "type": "string" }, { "type": "null" } ], - "title": "Headers" - }, - "id": { - "title": "Id", - "type": "string" - }, - "name": { - "title": "Name", - "type": "string" - }, - "notes": { + "description": "Optional title", + "title": "Title" + } + }, + "required": [ + "text" + ], + "title": "InlineTextReplaceRequest", + "type": "object" + }, + "InlineTextUploadRequest": { + "description": "Request model for inline text uploads.", + "properties": { + "content_type": { "anyOf": [ { "type": "string" @@ -6206,24 +6081,29 @@ "type": "null" } ], - "title": "Notes" + "default": "text/plain", + "description": "MIME type for the text content", + "title": "Content Type" }, - "tool_name": { + "metadata": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Tool Name" + "description": "Optional metadata object", + "title": "Metadata" }, - "tool_type": { - "title": "Tool Type", + "text": { + "description": "Text content to upload", + "title": "Text", "type": "string" }, - "tool_type_pattern": { + "title": { "anyOf": [ { "type": "string" @@ -6232,217 +6112,188 @@ "type": "null" } ], - "title": "Tool Type Pattern" + "description": "Optional title", + "title": "Title" } }, "required": [ - "id", - "tool_type", - "name" + "text" ], - "title": "PromptToolResponse", + "title": "InlineTextUploadRequest", "type": "object" }, - "ProposedActionResponse": { - "description": "A single proposed action.", + "InsufficientCreditsDetail": { + "description": "``detail`` body for a 402 ``insufficient_credits`` response.", "properties": { - "action_type": { - "description": "Type of the proposed action.", - "title": "Action Type", - "type": "string" - }, - "description": { - "description": "Human-readable description of the action.", - "title": "Description", + "account_id": { + "description": "UUID of the account that ran out of credits.", + "title": "Account Id", "type": "string" }, - "is_destructive": { - "default": false, - "description": "Whether the action is destructive.", - "title": "Is Destructive", - "type": "boolean" - }, - "params": { - "additionalProperties": true, - "description": "Parameters for the action.", - "title": "Params", - "type": "object" - }, - "preview": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Planning-time dry-run preview attached by the solution AI assistant for create_agent / update_agent actions. Contains ``steps`` (the generated step tree), ``step_count``, ``warnings`` (a mix of heuristic structural issues \u2014 e.g. brittle JSONPath, pass-through ``regex_replace``, ``prompt_call`` missing a model \u2014 and deterministic resource-usage issues: every pre-bound knowledge base / memory bank must be referenced by at least one step, and no step may reference an unknown id), and ``skipped`` / ``skipped_reason`` when preview couldn't run (e.g. the action depends on resources created earlier in the same plan). ``None`` for non-agent actions or when generation failed.", - "title": "Preview" - } - }, - "required": [ - "action_type", - "params", - "description" - ], - "title": "ProposedActionResponse", - "type": "object" - }, - "ProposedPolicyActionResponse": { - "description": "A single proposed governance policy action.", - "properties": { - "action_type": { - "description": "Type of action: create, update, delete, enable, or disable.", - "title": "Action Type", + "error": { + "const": "insufficient_credits", + "description": "Stable machine-readable error code.", + "title": "Error", "type": "string" }, - "description": { - "description": "Human-readable description of what this action will do.", - "title": "Description", + "message": { + "description": "Human-readable explanation.", + "title": "Message", "type": "string" - }, - "params": { - "additionalProperties": true, - "description": "Parameters for the action (e.g. policy_document_id, thresholds).", - "title": "Params", - "type": "object" - } - }, - "required": [ - "action_type", - "description", - "params" - ], - "title": "ProposedPolicyActionResponse", - "type": "object" - }, - "RemoveEmailDomainResponse": { - "properties": { - "cleanup_note": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Cleanup Note" - }, - "removed": { - "default": true, - "title": "Removed", - "type": "boolean" - } - }, - "title": "RemoveEmailDomainResponse", - "type": "object" - }, - "ResumeInboundResponse": { - "properties": { - "resumed": { - "title": "Resumed", - "type": "boolean" } }, "required": [ - "resumed" + "error", + "message", + "account_id" ], - "title": "ResumeInboundResponse", - "type": "object" - }, - "SendTestEmailResponse": { - "properties": { - "sent": { - "default": true, - "title": "Sent", - "type": "boolean" - } - }, - "title": "SendTestEmailResponse", + "title": "InsufficientCreditsDetail", "type": "object" }, - "SetAutoBlockModeRequest": { - "description": "Set the account's governance auto-block mode (shared REST request).", + "InsufficientCreditsResponse": { + "description": "402 envelope returned when the account has exhausted its credits.", "properties": { - "mode": { - "title": "Mode", - "type": "string" + "detail": { + "$ref": "#/components/schemas/InsufficientCreditsDetail" } }, "required": [ - "mode" + "detail" ], - "title": "SetAutoBlockModeRequest", + "title": "InsufficientCreditsResponse", "type": "object" }, - "SolutionSourceConnectionResponse": { + "JsonValue": {}, + "KnowledgeBaseListResponseModel": { + "description": "Paginated list of knowledge bases.", "properties": { - "id": { - "format": "uuid", - "title": "Id", - "type": "string" + "knowledge_bases": { + "description": "List of knowledge bases on this page.", + "items": { + "$ref": "#/components/schemas/KnowledgeBaseResponseModel" + }, + "title": "Knowledge Bases", + "type": "array" }, - "name": { - "title": "Name", - "type": "string" + "limit": { + "description": "Items per page.", + "title": "Limit", + "type": "integer" + }, + "page": { + "description": "Current page number (1-based).", + "title": "Page", + "type": "integer" + }, + "total": { + "description": "Total number of knowledge bases.", + "title": "Total", + "type": "integer" } }, "required": [ - "id", - "name" + "knowledge_bases", + "page", + "limit", + "total" ], - "title": "SolutionSourceConnectionResponse", + "title": "KnowledgeBaseListResponseModel", "type": "object" }, - "SolutionSummaryResponse": { - "description": "Response model for solution summary.", + "KnowledgeBaseResponseModel": { + "description": "Response model for a single knowledge base.", "properties": { - "agent_count": { - "description": "Number of linked agents.", - "title": "Agent Count", - "type": "integer" - }, "created_at": { - "description": "Timestamp when the solution was created.", + "description": "ISO-8601 creation timestamp.", "title": "Created At", "type": "string" }, - "description": { - "description": "Description of the solution.", - "title": "Description", - "type": "string" + "default_score_threshold": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Editor default for a new retrieval step's Minimum Rerank Score.", + "title": "Default Score Threshold" }, - "id": { - "description": "Unique identifier for the solution.", - "format": "uuid", - "title": "Id", - "type": "string" + "default_top_k": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Editor default for a new retrieval step's Top K.", + "title": "Default Top K" }, - "knowledge_base_count": { - "description": "Number of linked knowledge bases.", - "title": "Knowledge Base Count", - "type": "integer" + "default_top_n": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Editor default for a new retrieval step's Top N.", + "title": "Default Top N" }, - "memory_bank_count": { - "description": "Number of linked memory banks.", - "title": "Memory Bank Count", - "type": "integer" + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional description.", + "title": "Description" + }, + "id": { + "description": "Unique knowledge base identifier.", + "title": "Id", + "type": "string" }, "name": { - "description": "Name of the solution.", + "description": "Human-readable name.", "title": "Name", "type": "string" }, - "source_connection_count": { - "description": "Number of linked source connections.", - "title": "Source Connection Count", - "type": "integer" + "readonly": { + "default": false, + "description": "Whether the knowledge base is read-only.", + "title": "Readonly", + "type": "boolean" + }, + "reranker_model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Reranker model in use.", + "title": "Reranker Model" + }, + "sources": { + "description": "Linked source connections.", + "items": { + "$ref": "#/components/schemas/SourceConnectionResponseModel" + }, + "title": "Sources", + "type": "array" }, "updated_at": { - "description": "Timestamp when the solution was last updated.", + "description": "ISO-8601 last-update timestamp.", "title": "Updated At", "type": "string" } @@ -6450,66 +6301,143 @@ "required": [ "id", "name", - "description", - "agent_count", - "knowledge_base_count", - "source_connection_count", - "memory_bank_count", "created_at", "updated_at" ], - "title": "SolutionSummaryResponse", + "title": "KnowledgeBase", "type": "object" }, - "SourceConnectionResponseModel": { - "description": "Nested source connection summary within a knowledge base response.", + "LinkResourcesRequest": { "properties": { - "id": { - "description": "Source connection identifier.", - "title": "Id", - "type": "string" - }, - "name": { - "description": "Source connection name.", - "title": "Name", + "ids": { + "description": "Resource IDs to link", + "items": { + "format": "uuid", + "type": "string" + }, + "minItems": 1, + "title": "Ids", + "type": "array" + } + }, + "required": [ + "ids" + ], + "title": "LinkResourcesRequest", + "type": "object" + }, + "MarkAiSuggestionRequest": { + "properties": { + "accepted": { + "description": "True to accept the suggestion, false to decline it.", + "title": "Accepted", + "type": "boolean" + } + }, + "required": [ + "accepted" + ], + "title": "MarkAiSuggestionRequest", + "type": "object" + }, + "MarkConversationTurnRequest": { + "properties": { + "accepted": { + "description": "Whether the suggestion was accepted", + "title": "Accepted", + "type": "boolean" + } + }, + "required": [ + "accepted" + ], + "title": "MarkConversationTurnRequest", + "type": "object" + }, + "MeResponse": { + "properties": { + "account_id": { + "format": "uuid", + "title": "Account Id", "type": "string" }, - "polling": { + "organizations": { + "items": { + "$ref": "#/components/schemas/OrganizationInfoResponse" + }, + "title": "Organizations", + "type": "array" + } + }, + "required": [ + "account_id", + "organizations" + ], + "title": "MeResponse", + "type": "object" + }, + "MemoryBankAiAssistantResponse": { + "description": "Response from the memory bank AI assistant.", + "properties": { + "config": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/MemoryBankConfigResponse" }, { "type": "null" } ], - "description": "Polling configuration.", - "title": "Polling" + "description": "Proposed configuration, or null." }, - "source_type": { - "description": "Type of source (rss, website, etc.).", - "title": "Source Type", + "conversation_id": { + "description": "Conversation ID for follow-up.", + "title": "Conversation Id", "type": "string" }, - "url": { - "description": "Source URL.", - "title": "Url", + "example_prompts": { + "description": "Example natural-language prompts that demonstrate the capabilities of the memory bank AI assistant.", + "items": { + "$ref": "#/components/schemas/ExamplePrompt" + }, + "title": "Example Prompts", + "type": "array" + }, + "note": { + "description": "AI-generated explanation.", + "title": "Note", "type": "string" + }, + "prompt_call_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Prompt call ID for credit tracking.", + "title": "Prompt Call Id" + }, + "success": { + "default": false, + "description": "Whether generation succeeded.", + "title": "Success", + "type": "boolean" } }, "required": [ - "id", - "name", - "url", - "source_type" + "conversation_id", + "note" ], - "title": "SourceConnectionResponseModel", + "title": "MemoryBankAiAssistantResponse", "type": "object" }, - "SourceEmbeddingMigrationResponse": { - "description": "Response model for source embedding migration status.", + "MemoryBankConfigResponse": { + "description": "Suggested memory bank configuration from the AI assistant.", "properties": { - "completed_at": { + "compaction_prompt": { "anyOf": [ { "type": "string" @@ -6518,13 +6446,10 @@ "type": "null" } ], - "title": "Completed At" - }, - "created_at": { - "title": "Created At", - "type": "string" + "description": "Suggested compaction prompt.", + "title": "Compaction Prompt" }, - "failure_message": { + "description": { "anyOf": [ { "type": "string" @@ -6533,156 +6458,133 @@ "type": "null" } ], - "title": "Failure Message" - }, - "id": { - "title": "Id", - "type": "string" + "description": "Suggested description.", + "title": "Description" }, - "notification_recipients": { + "max_age_days": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "integer" }, { "type": "null" } ], - "title": "Notification Recipients" - }, - "phase": { - "title": "Phase", - "type": "string" + "description": "Always null. Age-based compaction is retired \u2014 the assistant never suggests it. Kept so an SDK generated before the change still validates this response.", + "title": "Max Age Days" }, - "progress_current": { - "title": "Progress Current", - "type": "integer" - }, - "progress_message": { + "max_size_tokens": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Progress Message" - }, - "progress_total": { - "title": "Progress Total", - "type": "integer" - }, - "source_connection_id": { - "title": "Source Connection Id", - "type": "string" - }, - "source_id_new": { - "title": "Source Id New", - "type": "string" - }, - "source_id_old": { - "title": "Source Id Old", - "type": "string" + "description": "Max size in tokens.", + "title": "Max Size Tokens" }, - "started_at": { + "max_turns": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Started At" + "description": "Max conversation turns.", + "title": "Max Turns" }, - "status": { - "title": "Status", + "mode": { + "description": "Memory bank mode.", + "title": "Mode", "type": "string" }, - "target_dimensions": { - "title": "Target Dimensions", - "type": "integer" - }, - "target_embedding_model": { - "title": "Target Embedding Model", + "name": { + "description": "Suggested name.", + "title": "Name", "type": "string" }, - "task_execution_id": { + "retention_days": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Task Execution Id" + "description": "Retention in days.", + "title": "Retention Days" }, - "updated_at": { - "title": "Updated At", + "type": { + "description": "Memory bank type: conversation or general.", + "title": "Type", "type": "string" } }, "required": [ - "id", - "source_connection_id", - "source_id_old", - "source_id_new", - "target_embedding_model", - "target_dimensions", - "status", - "phase", - "progress_current", - "progress_total", - "progress_message", - "failure_message", - "notification_recipients", - "task_execution_id", - "started_at", - "completed_at", - "created_at", - "updated_at" + "name", + "type", + "mode" ], - "title": "SourceEmbeddingMigrationResponse", + "title": "MemoryBankConfigResponse", "type": "object" }, - "SourceIndexMode": { - "description": "Embedding quality / cost trade-off preset for custom_index sources.\n\nEach preset controls the default embedding dimensions, chunk size, and\nchunk overlap. The embedding model is always the account-level default\n(currently ``AWS_BEDROCK_AMAZON_NOVA_2_MULTIMODAL``).\n\nPresets:\n FAST_AND_CHEAP: 256 dimensions, 3 000 char chunks, 500 char overlap.\n BALANCED: 384 dimensions, 1 500 char chunks, 300 char overlap.\n SLOW_AND_THOROUGH: 1 024 dimensions, 1 000 char chunks, 200 char overlap.\n CUSTOM: Caller supplies embedding model, dimensions, and chunk config.", - "enum": [ - "fast_and_cheap", - "balanced", - "slow_and_thorough", - "custom" + "MemoryBankListResponseModel": { + "description": "Paginated list of memory banks.", + "properties": { + "limit": { + "description": "Items per page.", + "title": "Limit", + "type": "integer" + }, + "memory_banks": { + "description": "List of memory banks on this page.", + "items": { + "$ref": "#/components/schemas/MemoryBankResponseModel" + }, + "title": "Memory Banks", + "type": "array" + }, + "page": { + "description": "Current page number (1-based).", + "title": "Page", + "type": "integer" + }, + "total": { + "description": "Total number of memory banks.", + "title": "Total", + "type": "integer" + } + }, + "required": [ + "memory_banks", + "page", + "limit", + "total" ], - "title": "SourceIndexMode", - "type": "string" + "title": "MemoryBankListResponseModel", + "type": "object" }, - "SourceResponse": { - "description": "Response model for source data.", + "MemoryBankResponseModel": { + "description": "Response model for a single memory bank.", "properties": { - "account_id": { - "description": "Account ID associated with the source.", - "format": "uuid", - "title": "Account Id", - "type": "string" - }, - "avg_episodes_per_month": { + "chunk_overlap": { "anyOf": [ { - "type": "number" + "type": "integer" }, { "type": "null" } ], - "description": "Average number of episodes per month.", - "title": "Avg Episodes Per Month" + "description": "Character overlap between chunks.", + "title": "Chunk Overlap" }, - "avg_words_per_episode": { + "chunk_size": { "anyOf": [ { "type": "integer" @@ -6691,10 +6593,10 @@ "type": "null" } ], - "description": "Average number of words per episode.", - "title": "Avg Words Per Episode" + "description": "Characters per chunk.", + "title": "Chunk Size" }, - "chunk_language": { + "compaction_prompt": { "anyOf": [ { "type": "string" @@ -6703,34 +6605,39 @@ "type": "null" } ], - "description": "Language used for chunking content.", - "title": "Chunk Language" + "description": "Custom prompt used when compacting older entries. When set, entries that exceed a threshold are summarized into a new entry before being soft-deleted.", + "title": "Compaction Prompt" }, - "chunk_overlap": { + "created_at": { + "description": "ISO-8601 creation timestamp.", + "title": "Created At", + "type": "string" + }, + "description": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Chunk overlap for content processing.", - "title": "Chunk Overlap" + "description": "Optional description of the memory bank's purpose.", + "title": "Description" }, - "chunk_regex_separators": { + "dimensions": { "anyOf": [ { - "type": "boolean" + "type": "integer" }, { "type": "null" } ], - "description": "Indicates if chunk separators are regex patterns.", - "title": "Chunk Regex Separators" + "description": "Vector embedding dimensions.", + "title": "Dimensions" }, - "chunk_separators": { + "embedding_model": { "anyOf": [ { "type": "string" @@ -6739,10 +6646,15 @@ "type": "null" } ], - "description": "Chunk separators used for content processing.", - "title": "Chunk Separators" + "description": "Embedding model identifier.", + "title": "Embedding Model" }, - "chunk_size": { + "id": { + "description": "Unique memory bank identifier.", + "title": "Id", + "type": "string" + }, + "max_age_days": { "anyOf": [ { "type": "integer" @@ -6751,26 +6663,10 @@ "type": "null" } ], - "description": "Chunk size for content processing.", - "title": "Chunk Size" - }, - "content_count": { - "default": 0, - "description": "Number of content items associated with the source connection.", - "title": "Content Count", - "type": "integer" - }, - "content_filter": { - "description": "Content filter for the source connection.", - "title": "Content Filter", - "type": "string" - }, - "created_at": { - "description": "Timestamp when the source connection was created.", - "title": "Created At", - "type": "string" + "description": "DEPRECATED and no longer applied. Age now belongs solely to retention_days, which deletes; compaction triggers on max_size_tokens and max_turns. Always null for clients sending Seclai-Version 2026-08-03 or later; older clients keep reading whatever value was stored.", + "title": "Max Age Days" }, - "dimensions": { + "max_size_tokens": { "anyOf": [ { "type": "integer" @@ -6779,129 +6675,289 @@ "type": "null" } ], - "description": "Dimensions of the embedding model.", - "title": "Dimensions" + "description": "Max total tokens (per partition) before compaction. Checked both inline after each write and by the hourly background sweep.", + "title": "Max Size Tokens" }, - "embedding_model": { + "max_turns": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "description": "Embedding model used for the source connection.", - "title": "Embedding Model" + "description": "Max conversation turns (per partition) before compaction. Checked both inline after each write and by the hourly background sweep.", + "title": "Max Turns" }, - "embedding_model_type": { + "mode": { + "description": "Embedding mode: fast_and_cheap, balanced, slow_and_thorough, or custom.", + "title": "Mode", + "type": "string" + }, + "name": { + "description": "Human-readable name.", + "title": "Name", + "type": "string" + }, + "retention_days": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "description": "Type of the embedding model.", - "title": "Embedding Model Type" + "description": "Content retention period in days (null = indefinite).", + "title": "Retention Days" }, - "free_retention_days": { + "source_connection_id": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Number of days content is stored for free before billing applies.", - "title": "Free Retention Days" + "description": "Linked content source ID (null if not yet provisioned).", + "title": "Source Connection Id" }, - "has_historical_data": { + "strip_quoted_reply_chains": { "default": false, - "description": "Indicates if the source connection has historical data.", - "title": "Has Historical Data", + "description": "Conversation banks only. When true, a conversation turn written to this bank has the quoted reply chain an email client prepends to a reply dropped from it. Only inbound (user) turns are affected, and only words in a run of at least ~40 matching a recent turn word for word are dropped (line wrapping and punctuation at a word's edge are ignored). A word the sender changed is kept, including a one-character change inside a link, address or amount, unless the change is only to that edge punctuation.", + "title": "Strip Quoted Reply Chains", "type": "boolean" }, - "id": { - "description": "Unique identifier for the source connection.", - "title": "Id", + "type": { + "description": "Bank type: conversation (chat-turn with speaker) or general (flat entries).", + "title": "Type", "type": "string" }, - "index_mode": { + "updated_at": { + "description": "ISO-8601 last-update timestamp.", + "title": "Updated At", + "type": "string" + } + }, + "required": [ + "id", + "name", + "type", + "mode", + "created_at", + "updated_at" + ], + "title": "MemoryBank", + "type": "object" + }, + "ModalityRateResponse": { + "description": "Per-modality rate for an LLM that prices image/audio/video output\n(or input) at a rate distinct from the default text rate.\n\nExample: Gemini 3.1 Flash Image charges $3/1M output tokens for\ntext but $60/1M output tokens for generated images. The image rate\nsurfaces here with ``modality=\"image\"`` and ``output_credits_per_1000_tokens``\nset; the default text rate stays on the parent model fields.", + "properties": { + "input_credits_per_1000_tokens": { "anyOf": [ { - "$ref": "#/components/schemas/SourceIndexMode" + "type": "number" }, { "type": "null" } ], - "description": "Index mode for custom_index sources: fast_and_cheap, balanced, slow_and_thorough, or custom." - }, - "media_types": { - "description": "Media kinds extracted from indexed content and embedded as multi-modal KB chunks (subset of ['images', 'video']). Empty = text-only.", - "items": { - "type": "string" - }, - "title": "Media Types", - "type": "array" + "title": "Input Credits Per 1000 Tokens" }, - "name": { - "description": "Name of the source connection.", - "title": "Name", + "modality": { + "title": "Modality", "type": "string" }, - "next_poll_at": { + "output_credits_per_1000_tokens": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Timestamp for the next scheduled poll.", - "title": "Next Poll At" + "title": "Output Credits Per 1000 Tokens" + } + }, + "required": [ + "modality" + ], + "title": "ModalityRateResponse", + "type": "object" + }, + "OkResponse": { + "description": "A minimal ``{\"ok\": true}`` acknowledgement for state-mutating actions\nthat have no richer resource to return (e.g. accept/decline a suggestion).", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "title": "OkResponse", + "type": "object" + }, + "OrganizationAlertPreferenceListResponse": { + "properties": { + "preferences": { + "items": { + "$ref": "#/components/schemas/routers__api__alerts__OrganizationAlertPreferenceResponse" + }, + "title": "Preferences", + "type": "array" }, - "polling": { + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "preferences", + "total" + ], + "title": "OrganizationAlertPreferenceListResponse", + "type": "object" + }, + "OrganizationInfoResponse": { + "properties": { + "account_id": { + "format": "uuid", + "title": "Account Id", + "type": "string" + }, + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + } + }, + "required": [ + "id", + "name", + "account_id" + ], + "title": "OrganizationInfoResponse", + "type": "object" + }, + "PaginationResponse": { + "description": "Pagination information.", + "properties": { + "has_next": { + "title": "Has Next", + "type": "boolean" + }, + "has_prev": { + "title": "Has Prev", + "type": "boolean" + }, + "limit": { + "title": "Limit", + "type": "integer" + }, + "page": { + "title": "Page", + "type": "integer" + }, + "pages": { + "title": "Pages", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "page", + "limit", + "total", + "pages", + "has_next", + "has_prev" + ], + "title": "PaginationResponse", + "type": "object" + }, + "PendingProcessingCompletedFailedStatus": { + "enum": [ + "pending", + "processing", + "completed", + "failed", + "queued", + "waiting_human", + "waiting_scheduled" + ], + "title": "PendingProcessingCompletedFailedStatus", + "type": "string" + }, + "PlaygroundCreateRequest": { + "description": "Create a model playground experiment via the public API.", + "properties": { + "effort": { "anyOf": [ { - "type": "string" + "additionalProperties": { + "type": "string" + }, + "type": "object" }, { "type": "null" } ], - "description": "Polling configuration for the source connection.", - "title": "Polling" + "description": "Reasoning effort per model id, each one of that model's `effort_options` values. Not combinable with `json_template`.", + "title": "Effort" }, - "polling_action": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } + "evaluation_complexity": { + "default": "medium", + "description": "simple, medium, or complex", + "enum": [ + "simple", + "medium", + "complex" ], - "description": "Polling action for the source connection.", - "title": "Polling Action" + "title": "Evaluation Complexity", + "type": "string" }, - "polling_max_items": { + "evaluation_mode": { + "default": "manual", + "description": "manual or prompt", + "enum": [ + "manual", + "prompt" + ], + "title": "Evaluation Mode", + "type": "string" + }, + "evaluator_model_id": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Maximum items to poll for the source connection.", - "title": "Polling Max Items" + "description": "Evaluator model ID when evaluation_mode is prompt.", + "title": "Evaluator Model Id" }, - "pulled_at": { + "include_step_output_in_evaluation": { + "default": false, + "description": "Whether to include selected step output as evaluator context.", + "title": "Include Step Output In Evaluation", + "type": "boolean" + }, + "json_template": { "anyOf": [ { "type": "string" @@ -6910,139 +6966,86 @@ "type": "null" } ], - "description": "Timestamp when content was last pulled.", - "title": "Pulled At" + "description": "Optional JSON template for advanced mode.", + "title": "Json Template" }, - "readonly": { - "default": false, - "description": "Indicates if the source connection is read-only.", - "title": "Readonly", - "type": "boolean" + "model_ids": { + "description": "Selected model IDs (1-10).", + "items": { + "type": "string" + }, + "maxItems": 10, + "minItems": 1, + "title": "Model Ids", + "type": "array" }, - "retention": { + "prompt": { + "description": "Prompt text for the experiment.", + "title": "Prompt", + "type": "string" + }, + "selected_step_output": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Retention period for the source connection.", - "title": "Retention" + "description": "Optional step output text for evaluator context.", + "title": "Selected Step Output" }, - "source_type": { - "description": "Type of the source connection.", - "title": "Source Type", - "type": "string" - }, - "system_managed": { - "default": false, - "description": "Indicates if this source is automatically managed by the system (e.g., agent traces).", - "title": "System Managed", - "type": "boolean" - }, - "updated_at": { - "description": "Timestamp when the source connection was last updated.", - "title": "Updated At", + "system_prompt": { + "default": "", + "description": "Optional system prompt.", + "title": "System Prompt", "type": "string" - }, - "url": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "URL of the source connection.", - "title": "Url" } }, "required": [ - "id", - "account_id", - "name", - "url", - "source_type", - "polling", - "polling_action", - "polling_max_items", - "content_filter", - "retention", - "pulled_at", - "next_poll_at", - "created_at", - "updated_at" + "model_ids", + "prompt" ], - "title": "SourceResponse", + "title": "PlaygroundCreateRequest", "type": "object" }, - "StandaloneTestCompactionRequest": { - "description": "Request body for testing a compaction prompt *without* an existing bank.\n\nUsed on the create-memory-bank page where no bank ID exists yet.\n``compaction_prompt`` is required (no bank to fall back to).\nContent must come from ``sample_entries`` or ``generate_direction``\n(no existing entries to fetch).", + "PromptModelAutoUpgradeStrategy": { + "enum": [ + "none", + "early_adopter", + "middle_of_road", + "cautious_adopter" + ], + "title": "PromptModelAutoUpgradeStrategy", + "type": "string" + }, + "PromptToolResponse": { + "description": "Response model for a prompt tool.", "properties": { - "bank_type": { - "default": "conversation", - "description": "Memory bank type ('conversation' or 'general') \u2014 controls the style of generated entries.", - "title": "Bank Type", - "type": "string" - }, - "compaction_prompt": { - "description": "Compaction prompt to test.", - "minLength": 1, - "title": "Compaction Prompt", - "type": "string" - }, - "entry_count": { - "default": 5, - "description": "Number of entries to generate when using generate_direction.", - "maximum": 20.0, - "minimum": 2.0, - "title": "Entry Count", - "type": "integer" - }, - "generate_direction": { + "description": { "anyOf": [ { - "maxLength": 2000, "type": "string" }, { "type": "null" } ], - "description": "Direction for the LLM to generate sample entries.", - "title": "Generate Direction" + "title": "Description" }, - "sample_entries": { + "documentation_url": { "anyOf": [ { - "items": { - "type": "string" - }, - "maxItems": 20, - "minItems": 1, - "type": "array" + "type": "string" }, { "type": "null" } ], - "description": "Explicit sample entries to compact.", - "title": "Sample Entries" - } - }, - "required": [ - "compaction_prompt" - ], - "title": "StandaloneTestCompactionRequest", - "type": "object" - }, - "StartSourceEmbeddingMigrationRequest": { - "description": "Request payload to start a source embedding migration.", - "properties": { - "chunk_language": { + "title": "Documentation Url" + }, + "example": { "anyOf": [ { "type": "string" @@ -7051,35 +7054,42 @@ "type": "null" } ], - "description": "Language-specific chunking language code", - "title": "Chunk Language" + "title": "Example" }, - "chunk_overlap": { + "headers": { "anyOf": [ { - "minimum": 0.0, - "type": "integer" + "additionalProperties": { + "type": "string" + }, + "type": "object" }, { "type": "null" } ], - "description": "Override chunk overlap (characters)", - "title": "Chunk Overlap" + "title": "Headers" }, - "chunk_regex_separators": { + "id": { + "title": "Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "notes": { "anyOf": [ { - "type": "boolean" + "type": "string" }, { "type": "null" } ], - "description": "Whether chunk separators are regex patterns", - "title": "Chunk Regex Separators" + "title": "Notes" }, - "chunk_separators": { + "tool_name": { "anyOf": [ { "type": "string" @@ -7088,60 +7098,110 @@ "type": "null" } ], - "description": "Custom chunk separators (JSON-encoded list)", - "title": "Chunk Separators" + "title": "Tool Name" }, - "chunk_size": { + "tool_type": { + "title": "Tool Type", + "type": "string" + }, + "tool_type_pattern": { "anyOf": [ { - "exclusiveMinimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Override chunk size (characters per chunk)", - "title": "Chunk Size" + "title": "Tool Type Pattern" + } + }, + "required": [ + "id", + "tool_type", + "name" + ], + "title": "PromptToolResponse", + "type": "object" + }, + "ProposedActionResponse": { + "description": "A single proposed action.", + "properties": { + "action_type": { + "description": "Type of the proposed action.", + "title": "Action Type", + "type": "string" }, - "notification_recipients": { + "description": { + "description": "Human-readable description of the action.", + "title": "Description", + "type": "string" + }, + "is_destructive": { + "default": false, + "description": "Whether the action is destructive.", + "title": "Is Destructive", + "type": "boolean" + }, + "params": { + "additionalProperties": true, + "description": "Parameters for the action.", + "title": "Params", + "type": "object" + }, + "preview": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Optional notification recipient emails", - "title": "Notification Recipients" - }, - "target_dimensions": { - "description": "Target embedding dimensions", - "exclusiveMinimum": 0.0, - "title": "Target Dimensions", - "type": "integer" + "description": "Planning-time dry-run preview attached by the solution AI assistant for create_agent / update_agent actions. Contains ``steps`` (the generated step tree), ``step_count``, ``warnings`` (a mix of heuristic structural issues \u2014 e.g. brittle JSONPath, pass-through ``regex_replace``, ``prompt_call`` missing a model \u2014 and deterministic resource-usage issues: every pre-bound knowledge base / memory bank must be referenced by at least one step, and no step may reference an unknown id), and ``skipped`` / ``skipped_reason`` when preview couldn't run (e.g. the action depends on resources created earlier in the same plan). ``None`` for non-agent actions or when generation failed.", + "title": "Preview" + } + }, + "required": [ + "action_type", + "params", + "description" + ], + "title": "ProposedActionResponse", + "type": "object" + }, + "ProposedPolicyActionResponse": { + "description": "A single proposed governance policy action.", + "properties": { + "action_type": { + "description": "Type of action: create, update, delete, enable, or disable.", + "title": "Action Type", + "type": "string" }, - "target_embedding_model": { - "description": "Target embedding model enum", - "title": "Target Embedding Model", + "description": { + "description": "Human-readable description of what this action will do.", + "title": "Description", "type": "string" + }, + "params": { + "additionalProperties": true, + "description": "Parameters for the action (e.g. policy_document_id, thresholds).", + "title": "Params", + "type": "object" } }, "required": [ - "target_embedding_model", - "target_dimensions" + "action_type", + "description", + "params" ], - "title": "StartSourceEmbeddingMigrationRequest", + "title": "ProposedPolicyActionResponse", "type": "object" }, - "TestCompactionRequest": { - "description": "Request body for testing a compaction prompt against an existing bank.\n\nThe user may supply a ``compaction_prompt`` to override (or provide when\nthe bank has none). Content can come from three sources:\n\n1. Existing entries in the bank (default when neither field is set).\n2. ``sample_entries`` \u2013 caller-provided list of strings.\n3. ``generate_direction`` \u2013 an instruction to the LLM to generate sample\n memory entries. Useful for trying a prompt before any real data\n exists.\n\nAt most one of ``sample_entries`` / ``generate_direction`` may be given.", + "RemoveEmailDomainResponse": { "properties": { - "compaction_prompt": { + "cleanup_note": { "anyOf": [ { "type": "string" @@ -7150,55 +7210,56 @@ "type": "null" } ], - "description": "Compaction prompt to test. Falls back to the bank's current prompt when omitted.", - "title": "Compaction Prompt" + "title": "Cleanup Note" }, - "entry_count": { - "default": 5, - "description": "Number of entries to generate when using generate_direction.", - "maximum": 20.0, - "minimum": 2.0, - "title": "Entry Count", - "type": "integer" + "removed": { + "default": true, + "title": "Removed", + "type": "boolean" + } + }, + "title": "RemoveEmailDomainResponse", + "type": "object" + }, + "RerankerModelListResponse": { + "description": "Legacy (header-less) response shape for the reranker catalog.", + "properties": { + "default_model_type": { + "description": "Reranker used when a knowledge base does not choose one", + "title": "Default Model Type", + "type": "string" }, - "generate_direction": { - "anyOf": [ - { - "maxLength": 2000, - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Direction for the LLM to generate sample entries (e.g. 'Generate 5 entries about a customer support interaction').", - "title": "Generate Direction" + "models": { + "description": "Available reranker models", + "items": { + "$ref": "#/components/schemas/RerankerModelResponse" + }, + "title": "Models", + "type": "array" }, - "sample_entries": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "maxItems": 20, - "minItems": 1, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Explicit sample entries to compact.", - "title": "Sample Entries" + "search_processing_credits": { + "description": "Credits charged for processing a search request", + "title": "Search Processing Credits", + "type": "number" } }, - "title": "TestCompactionRequest", + "required": [ + "models", + "default_model_type", + "search_processing_credits" + ], + "title": "RerankerModelListResponse", "type": "object" }, - "TestDraftEvaluationRequest": { - "description": "Request body for ephemeral (non-persisted) evaluation testing.\n\nProvide either ``step_output`` (raw text) **or** ``agent_step_run_id``\n(to load output from storage). Exactly one must be supplied.", + "RerankerModelResponse": { + "description": "Information about a reranker model.", "properties": { - "agent_input": { + "credits_per_action": { + "description": "Credits charged per rerank action", + "title": "Credits Per Action", + "type": "number" + }, + "description": { "anyOf": [ { "type": "string" @@ -7207,23 +7268,43 @@ "type": "null" } ], - "description": "The original agent run input for context. When agent_step_run_id is supplied this is loaded automatically from the parent run if omitted.", - "title": "Agent Input" + "description": "Model description", + "title": "Description" }, - "agent_step_run_id": { + "is_default": { + "description": "Whether this is the platform default reranker", + "title": "Is Default", + "type": "boolean" + }, + "is_new": { + "default": false, + "description": "Whether the model is newly released", + "title": "Is New", + "type": "boolean" + }, + "max_input_tokens": { "anyOf": [ { - "format": "uuid", - "type": "string" + "type": "integer" }, { "type": "null" } ], - "description": "Load step output from this completed step run instead of supplying text.", - "title": "Agent Step Run Id" + "description": "Max input tokens per request", + "title": "Max Input Tokens" }, - "evaluation_prompt": { + "model_type": { + "description": "Full model type identifier. This is the value to send as reranker_model on a knowledge base; send \"none\" or an empty string to disable reranking.", + "title": "Model Type", + "type": "string" + }, + "name": { + "description": "Human-readable model name", + "title": "Name", + "type": "string" + }, + "provider": { "anyOf": [ { "type": "string" @@ -7232,211 +7313,209 @@ "type": "null" } ], - "title": "Evaluation Prompt" - }, - "evaluation_tier": { - "anyOf": [ - { - "$ref": "#/components/schemas/AgentEvaluationTier" - }, - { - "type": "null" - } - ] + "description": "Model provider identifier", + "title": "Provider" }, - "expectation_config": { + "supported_languages": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "title": "Expectation Config" - }, - "pass_threshold": { - "default": 0.5, - "maximum": 1.0, - "minimum": 0.0, - "title": "Pass Threshold", - "type": "number" + "description": "Supported languages", + "title": "Supported Languages" }, - "step_output": { + "url": { "anyOf": [ { - "minLength": 1, "type": "string" }, { "type": "null" } ], - "description": "The step output text to evaluate. Omit if agent_step_run_id is supplied.", - "title": "Step Output" + "description": "Model documentation URL", + "title": "Url" } }, - "title": "TestDraftEvaluationRequest", + "required": [ + "model_type", + "name", + "credits_per_action", + "is_default" + ], + "title": "RerankerModelResponse", "type": "object" }, - "TestDraftEvaluationResponse": { - "description": "Response for an ephemeral evaluation test.", + "ResumeInboundResponse": { "properties": { - "explanation": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Explanation" - }, - "passed": { - "title": "Passed", + "resumed": { + "title": "Resumed", "type": "boolean" - }, - "score": { - "title": "Score", - "type": "number" } }, "required": [ - "score", - "passed", - "explanation" + "resumed" ], - "title": "TestDraftEvaluationResponse", + "title": "ResumeInboundResponse", "type": "object" }, - "UnlinkResourcesRequest": { + "SendTestEmailResponse": { "properties": { - "ids": { - "description": "Resource IDs to unlink", - "items": { - "format": "uuid", - "type": "string" + "sent": { + "default": true, + "title": "Sent", + "type": "boolean" + } + }, + "title": "SendTestEmailResponse", + "type": "object" + }, + "ServiceUnavailableError": { + "properties": { + "error": { + "properties": { + "code": { + "enum": [ + "database_unavailable", + "vector_store_unavailable" + ], + "type": "string" + }, + "message": { + "type": "string" + } }, - "minItems": 1, - "title": "Ids", - "type": "array" + "required": [ + "code", + "message" + ], + "type": "object" } }, "required": [ - "ids" + "error" ], - "title": "UnlinkResourcesRequest", + "title": "ServiceUnavailableError", "type": "object" }, - "UnreadCountResponse": { + "SetAutoBlockModeRequest": { + "description": "Set the account's governance auto-block mode (shared REST request).", "properties": { - "count": { - "title": "Count", - "type": "integer" + "mode": { + "title": "Mode", + "type": "string" } }, "required": [ - "count" + "mode" ], - "title": "UnreadCountResponse", + "title": "SetAutoBlockModeRequest", "type": "object" }, - "UpdateAgentDefinitionRequest": { + "SolutionSourceConnectionResponse": { "properties": { - "definition": { - "additionalProperties": true, - "description": "The full agent definition (name, description, tags, steps). Steps form a tree workflow. Each step has a `step_type`, `id`, `name`, and type-specific config. Content enrichment steps (write_metadata, write_content_attachment, load_content_attachment, load_content) require content-triggered agents.", - "title": "Definition", - "type": "object" + "id": { + "format": "uuid", + "title": "Id", + "type": "string" }, - "expected_change_id": { - "description": "The change_id from the last GET, for optimistic locking.", - "title": "Expected Change Id", + "name": { + "title": "Name", "type": "string" } }, "required": [ - "expected_change_id", - "definition" + "id", + "name" ], - "title": "UpdateAgentDefinitionRequest", + "title": "SolutionSourceConnectionResponse", "type": "object" }, - "UpdateAlertConfigRequest": { + "SolutionSummaryResponse": { + "description": "Response model for solution summary.", "properties": { - "cooldown_minutes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "Cooldown period in minutes", - "title": "Cooldown Minutes" - }, - "distribution_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Distribution type", - "title": "Distribution Type" + "agent_count": { + "description": "Number of linked agents.", + "title": "Agent Count", + "type": "integer" }, - "enabled": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "description": "Whether the alert config is enabled", - "title": "Enabled" + "created_at": { + "description": "Timestamp when the solution was created.", + "title": "Created At", + "type": "string" }, - "recipient_user_ids": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "User IDs for selected_members distribution", - "title": "Recipient User Ids" + "description": { + "description": "Description of the solution.", + "title": "Description", + "type": "string" }, - "threshold": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Threshold configuration", - "title": "Threshold" + "id": { + "description": "Unique identifier for the solution.", + "format": "uuid", + "title": "Id", + "type": "string" + }, + "knowledge_base_count": { + "description": "Number of linked knowledge bases.", + "title": "Knowledge Base Count", + "type": "integer" + }, + "memory_bank_count": { + "description": "Number of linked memory banks.", + "title": "Memory Bank Count", + "type": "integer" + }, + "name": { + "description": "Name of the solution.", + "title": "Name", + "type": "string" + }, + "source_connection_count": { + "description": "Number of linked source connections.", + "title": "Source Connection Count", + "type": "integer" + }, + "updated_at": { + "description": "Timestamp when the solution was last updated.", + "title": "Updated At", + "type": "string" } }, - "title": "UpdateAlertConfigRequest", + "required": [ + "id", + "name", + "description", + "agent_count", + "knowledge_base_count", + "source_connection_count", + "memory_bank_count", + "created_at", + "updated_at" + ], + "title": "SolutionSummaryResponse", "type": "object" }, - "UpdateApiVersionRequest": { + "SourceConnectionResponseModel": { + "description": "Nested source connection summary within a knowledge base response.", "properties": { - "version": { + "id": { + "description": "Source connection identifier.", + "title": "Id", + "type": "string" + }, + "name": { + "description": "Source connection name.", + "title": "Name", + "type": "string" + }, + "polling": { "anyOf": [ { "type": "string" @@ -7445,85 +7524,153 @@ "type": "null" } ], - "description": "A YYYY-MM-DD date to pin the account to, or null to clear the pin (revert to the default baseline).", - "title": "Version" + "description": "Polling configuration.", + "title": "Polling" + }, + "source_type": { + "description": "Type of source (rss, website, etc.).", + "title": "Source Type", + "type": "string" + }, + "url": { + "description": "Source URL.", + "title": "Url", + "type": "string" } }, - "title": "UpdateApiVersionRequest", + "required": [ + "id", + "name", + "url", + "source_type" + ], + "title": "SourceConnectionResponseModel", "type": "object" }, - "UpdateEvaluationCriteriaRequest": { - "description": "Request body for updating an evaluation criteria.\n\nRetry settings and sample frequency are set at the agent level.", + "SourceContentStatusListResponse": { + "description": "Response model for a paginated per-item indexing status list.", "properties": { - "description": { + "data": { + "items": { + "$ref": "#/components/schemas/SourceContentStatusResponse" + }, + "title": "Data", + "type": "array" + }, + "pagination": { + "$ref": "#/components/schemas/PaginationResponse" + } + }, + "required": [ + "data", + "pagination" + ], + "title": "SourceContentStatusListResponse", + "type": "object" + }, + "SourceContentStatusResponse": { + "description": "Response model for one content item's indexing status.", + "properties": { + "awaiting_reindex": { + "default": false, + "description": "True when the item is linked and reports completed but its content is not yet embedded under the index the source connection currently uses, because it still sits under the index that connection used before an embedding migration switched it. Anything ingested while a migration ran can land in this state. Semantic and content search will not match it until it is re-embedded; a title keyword match can still return it, so the item may appear in results while its body is unsearchable. It clears on its own \u2014 a reconciliation pass re-embeds the item under the current index, typically within minutes of the migration finishing, and a daily sweep retries whatever is still outstanding, so a large backlog can take more than one sweep to drain. The re-embedding is not charged to your account: nothing you did caused it, so Seclai absorbs the cost. Never true for an item that is simply still indexing; content_status covers that.", + "title": "Awaiting Reindex", + "type": "boolean" + }, + "content_status": { + "description": "Indexing status: pending, fetching, transcribing, scanning, indexing, completed, or failed.", + "title": "Content Status", + "type": "string" + }, + "content_token_count": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Description" + "description": "Extracted token count.", + "title": "Content Token Count" }, - "enabled": { + "content_type": { + "description": "Content type group: text, audio, video, image, or document.", + "title": "Content Type", + "type": "string" + }, + "content_url": { "anyOf": [ { - "type": "boolean" + "type": "string" }, { "type": "null" } ], - "title": "Enabled" + "description": "Internal URL identifying the item. Uploaded files use a `file-upload://` URL.", + "title": "Content Url" }, - "evaluation_prompt": { + "content_version_id": { + "description": "ID of the content version. This is the `content_version_id` returned by the upload endpoints, so it is what you match an upload against.", + "title": "Content Version Id", + "type": "string" + }, + "content_word_count": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Evaluation Prompt" + "description": "Extracted word count.", + "title": "Content Word Count" }, - "evaluation_tier": { + "error": { "anyOf": [ { - "$ref": "#/components/schemas/AgentEvaluationTier" + "type": "string" }, { "type": "null" } - ] + ], + "description": "Why the item failed, when `content_status` is `failed`.", + "title": "Error" }, - "expectation_config": { + "extracted_media_capped": { + "default": false, + "description": "True when extraction stopped with media still unread, so the item references more media than was indexed and media search will not match anything past the cut. Two causes: a web page that ran out of the budget for fetching remote assets, or a container that could not be read to the end (a truncated or hostile archive). An uploaded document that reads cleanly is never capped, however much media it holds \u2014 there is no limit on that.", + "title": "Extracted Media Capped", + "type": "boolean" + }, + "extracted_media_count": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "integer" }, { "type": "null" } ], - "title": "Expectation Config" + "description": "Number of embedded images / videos extracted from inside this item and indexed as their own chunks. There is no limit on this \u2014 a document contributes as many as it holds. Null when there is no media record for the item: the extraction pass has not run, does not apply to this container, or found nothing. Treat null as 'unknown', never as zero.", + "title": "Extracted Media Count" }, - "pass_threshold": { + "extracted_media_limit": { "anyOf": [ { - "maximum": 1.0, - "minimum": 0.0, - "type": "number" + "type": "integer" }, { "type": "null" } ], - "title": "Pass Threshold" + "description": "The bound that was reached, when extracted_media_capped is true and the stop was a bound \u2014 a number of fetch attempts, or a number of seconds. Null when extraction was not capped, or when it stopped because the container could not be read rather than because a bound fired.", + "title": "Extracted Media Limit" }, - "step_id": { + "indexed_at": { "anyOf": [ { "type": "string" @@ -7532,85 +7679,100 @@ "type": "null" } ], - "title": "Step Id" - } - }, - "title": "UpdateEvaluationCriteriaRequest", - "type": "object" - }, - "UpdateKnowledgeBaseBody": { - "description": "Request body for updating a knowledge base.", - "properties": { - "default_score_threshold": { + "description": "Timestamp when the item finished indexing and became retrievable. `null` until then.", + "title": "Indexed At" + }, + "mime_type": { "anyOf": [ { - "maximum": 1.0, - "minimum": -1.0, - "type": "number" + "type": "string" }, { "type": "null" } ], - "description": "Default score threshold (-1 to clear).", - "title": "Default Score Threshold" + "description": "MIME type the item was ingested as, when known.", + "title": "Mime Type" }, - "default_top_k": { + "published_at": { "anyOf": [ { - "maximum": 200.0, - "minimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Default reranked results (0 to clear).", - "title": "Default Top K" + "description": "Publication timestamp of the item, when known.", + "title": "Published At" }, - "default_top_n": { + "pulled_at": { + "description": "Timestamp when the item was uploaded or pulled.", + "title": "Pulled At", + "type": "string" + }, + "source_connection_content_version_id": { "anyOf": [ { - "maximum": 200.0, - "minimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Default results (0 to clear).", - "title": "Default Top N" + "description": "ID to pass to `GET /contents/{id}`. `null` until the item has finished indexing \u2014 an item that is still processing, or that failed, has no retrievable content and keeps this `null`.", + "title": "Source Connection Content Version Id" }, - "description": { + "title": { "anyOf": [ { - "maxLength": 1000, "type": "string" }, { "type": "null" } ], - "description": "New description.", - "title": "Description" - }, - "name": { + "description": "Title of the content item.", + "title": "Title" + } + }, + "required": [ + "content_version_id", + "source_connection_content_version_id", + "title", + "content_url", + "content_type", + "mime_type", + "content_status", + "error", + "content_word_count", + "content_token_count", + "pulled_at", + "published_at", + "indexed_at" + ], + "title": "SourceContentStatusResponse", + "type": "object" + }, + "SourceEmbeddingMigrationResponse": { + "description": "Response model for source embedding migration status.", + "properties": { + "completed_at": { "anyOf": [ { - "maxLength": 255, - "minLength": 1, "type": "string" }, { "type": "null" } ], - "description": "New name.", - "title": "Name" + "title": "Completed At" }, - "reranker_model": { + "created_at": { + "title": "Created At", + "type": "string" + }, + "failure_message": { "anyOf": [ { "type": "string" @@ -7619,10 +7781,13 @@ "type": "null" } ], - "description": "Reranker model (empty string for no reranking).", - "title": "Reranker Model" + "title": "Failure Message" }, - "source_ids": { + "id": { + "title": "Id", + "type": "string" + }, + "notification_recipients": { "anyOf": [ { "items": { @@ -7634,17 +7799,17 @@ "type": "null" } ], - "description": "New list of source connection IDs.", - "title": "Source Ids" - } - }, - "title": "UpdateKnowledgeBaseBody", - "type": "object" - }, - "UpdateMemoryBankBody": { - "description": "Request body for updating a memory bank.\n\nOmitted fields are left unchanged. To **clear** a field back to null,\nsend a zero-value sentinel: ``0`` for integers, ``\"\"`` for strings.", - "properties": { - "compaction_prompt": { + "title": "Notification Recipients" + }, + "phase": { + "title": "Phase", + "type": "string" + }, + "progress_current": { + "title": "Progress Current", + "type": "integer" + }, + "progress_message": { "anyOf": [ { "type": "string" @@ -7653,108 +7818,167 @@ "type": "null" } ], - "description": "Custom prompt used when compacting older entries. When set, entries that exceed a threshold are summarized into a new entry before being soft-deleted. Send empty string \"\" to clear and disable summarisation.", - "title": "Compaction Prompt" + "title": "Progress Message" }, - "description": { + "progress_total": { + "title": "Progress Total", + "type": "integer" + }, + "source_connection_id": { + "title": "Source Connection Id", + "type": "string" + }, + "source_id_new": { + "title": "Source Id New", + "type": "string" + }, + "source_id_old": { + "title": "Source Id Old", + "type": "string" + }, + "started_at": { "anyOf": [ { - "maxLength": 1000, "type": "string" }, { "type": "null" } ], - "description": "Optional description. Send empty string \"\" to clear.", - "title": "Description" + "title": "Started At" }, - "max_age_days": { + "status": { + "title": "Status", + "type": "string" + }, + "target_dimensions": { + "title": "Target Dimensions", + "type": "integer" + }, + "target_embedding_model": { + "title": "Target Embedding Model", + "type": "string" + }, + "task_execution_id": { "anyOf": [ { - "minimum": 0.0, - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Max entry age in days before compaction. Checked inline after each write and by the hourly background sweep. Send 0 to disable.", - "title": "Max Age Days" + "title": "Task Execution Id" }, - "max_size_tokens": { + "updated_at": { + "title": "Updated At", + "type": "string" + } + }, + "required": [ + "id", + "source_connection_id", + "source_id_old", + "source_id_new", + "target_embedding_model", + "target_dimensions", + "status", + "phase", + "progress_current", + "progress_total", + "progress_message", + "failure_message", + "notification_recipients", + "task_execution_id", + "started_at", + "completed_at", + "created_at", + "updated_at" + ], + "title": "SourceEmbeddingMigrationResponse", + "type": "object" + }, + "SourceIndexMode": { + "description": "Embedding quality / cost trade-off preset for custom_index sources.\n\nEach preset controls the default embedding dimensions, chunk size, and\nchunk overlap. The embedding model is always the account-level default\n(currently ``AWS_BEDROCK_AMAZON_NOVA_2_MULTIMODAL``).\n\nPresets:\n FAST_AND_CHEAP: 256 dimensions, 3 000 char chunks, 500 char overlap.\n BALANCED: 384 dimensions, 1 500 char chunks, 300 char overlap.\n SLOW_AND_THOROUGH: 1 024 dimensions, 1 000 char chunks, 200 char overlap.\n CUSTOM: Caller supplies embedding model, dimensions, and chunk config.", + "enum": [ + "fast_and_cheap", + "balanced", + "slow_and_thorough", + "custom" + ], + "title": "SourceIndexMode", + "type": "string" + }, + "SourceResponse": { + "description": "Response model for source data.", + "properties": { + "account_id": { + "description": "Account ID associated with the source.", + "format": "uuid", + "title": "Account Id", + "type": "string" + }, + "avg_episodes_per_month": { "anyOf": [ { - "minimum": 0.0, - "type": "integer" + "type": "number" }, { "type": "null" } ], - "description": "Max total tokens (per partition) before compaction. Checked inline after each write and by the hourly background sweep. Send 0 to disable.", - "title": "Max Size Tokens" + "description": "Average number of episodes per month.", + "title": "Avg Episodes Per Month" }, - "max_turns": { + "avg_words_per_episode": { "anyOf": [ { - "minimum": 0.0, "type": "integer" }, { "type": "null" } ], - "description": "Max conversation turns (per partition) before compaction. Checked inline after each write and by the hourly background sweep. Send 0 to disable.", - "title": "Max Turns" + "description": "Average number of words per episode.", + "title": "Avg Words Per Episode" }, - "name": { + "chunk_language": { "anyOf": [ { - "maxLength": 255, - "minLength": 1, "type": "string" }, { "type": "null" } ], - "description": "New name.", - "title": "Name" + "description": "Language used for chunking content.", + "title": "Chunk Language" }, - "retention_days": { + "chunk_overlap": { "anyOf": [ { - "minimum": 0.0, "type": "integer" }, { "type": "null" } ], - "description": "Content source retention in days. Send 0 to clear (indefinite).", - "title": "Retention Days" - } - }, - "title": "UpdateMemoryBankBody", - "type": "object" - }, - "UpdateSolutionRequest": { - "description": "Request model for updating a solution", - "properties": { - "description": { + "description": "Chunk overlap for content processing.", + "title": "Chunk Overlap" + }, + "chunk_regex_separators": { "anyOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ], - "description": "Description of the solution", - "title": "Description" + "description": "Indicates if chunk separators are regex patterns.", + "title": "Chunk Regex Separators" }, - "name": { + "chunk_separators": { "anyOf": [ { "type": "string" @@ -7763,46 +7987,50 @@ "type": "null" } ], - "description": "Name of the solution", - "title": "Name" - } - }, - "title": "UpdateSolutionRequest", - "type": "object" - }, - "UpdateSourceBody": { - "description": "Request body for updating a content source.", - "properties": { - "media_types": { + "description": "Chunk separators used for content processing.", + "title": "Chunk Separators" + }, + "chunk_size": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "integer" }, { "type": "null" } ], - "description": "Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored; unsupported values are dropped. [] disables media extraction (text-only).", - "title": "Media Types" + "description": "Chunk size for content processing.", + "title": "Chunk Size" }, - "name": { + "content_count": { + "default": 0, + "description": "Number of content items associated with the source connection.", + "title": "Content Count", + "type": "integer" + }, + "content_filter": { + "description": "Content filter for the source connection.", + "title": "Content Filter", + "type": "string" + }, + "created_at": { + "description": "Timestamp when the source connection was created.", + "title": "Created At", + "type": "string" + }, + "dimensions": { "anyOf": [ { - "maxLength": 255, - "minLength": 1, - "type": "string" + "type": "integer" }, { "type": "null" } ], - "description": "New name.", - "title": "Name" + "description": "Dimensions of the embedding model.", + "title": "Dimensions" }, - "polling": { + "embedding_model": { "anyOf": [ { "type": "string" @@ -7811,154 +8039,69 @@ "type": "null" } ], - "description": "New polling interval.", - "title": "Polling" + "description": "Embedding model used for the source connection.", + "title": "Embedding Model" }, - "retention_days": { + "embedding_model_type": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "default": -1, - "description": "New retention period in days (null for unlimited).", - "title": "Retention Days" - } - }, - "title": "UpdateSourceBody", - "type": "object" - }, - "UploadAgentInputApiResponse": { - "properties": { - "content_type": { - "description": "Resolved MIME type.", - "title": "Content Type", - "type": "string" + "description": "Type of the embedding model.", + "title": "Embedding Model Type" }, - "error": { + "free_retention_days": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "description": "Error message if status is failed.", - "title": "Error" + "description": "Number of days content is stored for free before billing applies.", + "title": "Free Retention Days" }, - "file_size": { - "description": "Size in bytes.", - "title": "File Size", - "type": "integer" - }, - "filename": { - "description": "Original filename.", - "title": "Filename", - "type": "string" + "has_historical_data": { + "default": false, + "description": "Indicates if the source connection has historical data.", + "title": "Has Historical Data", + "type": "boolean" }, "id": { - "description": "Unique identifier for the upload.", + "description": "Unique identifier for the source connection.", "title": "Id", "type": "string" }, - "status": { - "description": "processing, ready, or failed.", - "title": "Status", - "type": "string" - } - }, - "required": [ - "id", - "status", - "filename", - "content_type", - "file_size" - ], - "title": "UploadAgentInputApiResponse", - "type": "object" - }, - "ValidationError": { - "properties": { - "loc": { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "integer" - } - ] - }, - "title": "Location", - "type": "array" - }, - "msg": { - "title": "Message", - "type": "string" - }, - "type": { - "title": "Error Type", - "type": "string" - } - }, - "required": [ - "loc", - "msg", - "type" - ], - "title": "ValidationError", - "type": "object" - }, - "VariantCategoryResponse": { - "description": "Response model for a variant category", - "properties": { - "category": { - "title": "Category", - "type": "string" - }, - "configurable": { - "title": "Configurable", - "type": "boolean" - }, - "description": { - "title": "Description", - "type": "string" + "index_mode": { + "anyOf": [ + { + "$ref": "#/components/schemas/SourceIndexMode" + }, + { + "type": "null" + } + ], + "description": "Index mode for custom_index sources: fast_and_cheap, balanced, slow_and_thorough, or custom." }, - "options": { + "media_types": { + "description": "Media kinds extracted from indexed content and embedded as multi-modal KB chunks (subset of ['images', 'video']). Empty = text-only.", "items": { - "$ref": "#/components/schemas/VariantOptionResponse" + "type": "string" }, - "title": "Options", + "title": "Media Types", "type": "array" }, - "title": { - "title": "Title", + "name": { + "description": "Name of the source connection.", + "title": "Name", "type": "string" - } - }, - "required": [ - "category", - "title", - "description", - "configurable", - "options" - ], - "title": "VariantCategoryResponse", - "type": "object" - }, - "VariantOptionResponse": { - "description": "Response model for a variant option", - "properties": { - "default": { - "title": "Default", - "type": "boolean" }, - "description": { + "next_poll_at": { "anyOf": [ { "type": "string" @@ -7967,144 +8110,187 @@ "type": "null" } ], - "title": "Description" + "description": "Timestamp for the next scheduled poll.", + "title": "Next Poll At" }, - "input_1h_cache_write_credits_per_1000_tokens": { + "polling": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Input 1H Cache Write Credits Per 1000 Tokens" + "description": "Polling configuration for the source connection.", + "title": "Polling" }, - "input_5m_cache_write_credits_per_1000_tokens": { + "polling_action": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Input 5M Cache Write Credits Per 1000 Tokens" + "description": "Polling action for the source connection.", + "title": "Polling Action" }, - "input_cache_hit_credits_per_1000_tokens": { + "polling_max_items": { "anyOf": [ { - "type": "number" + "type": "integer" }, { "type": "null" } ], - "title": "Input Cache Hit Credits Per 1000 Tokens" + "description": "Maximum items to poll for the source connection.", + "title": "Polling Max Items" }, - "input_credits_per_1000_tokens": { + "pulled_at": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Input Credits Per 1000 Tokens" + "description": "Timestamp when content was last pulled.", + "title": "Pulled At" }, - "long_context_input_cache_hit_credits_per_1000_tokens": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "title": "Long Context Input Cache Hit Credits Per 1000 Tokens" + "readonly": { + "default": false, + "description": "Indicates if the source connection is read-only.", + "title": "Readonly", + "type": "boolean" }, - "long_context_input_credits_per_1000_tokens": { + "retention": { "anyOf": [ { - "type": "number" + "type": "integer" }, { "type": "null" } ], - "title": "Long Context Input Credits Per 1000 Tokens" + "description": "Retention period for the source connection.", + "title": "Retention" }, - "long_context_output_credits_per_1000_tokens": { + "source_type": { + "description": "Type of the source connection.", + "title": "Source Type", + "type": "string" + }, + "system_managed": { + "default": false, + "description": "Indicates if this source is automatically managed by the system (e.g., agent traces).", + "title": "System Managed", + "type": "boolean" + }, + "updated_at": { + "description": "Timestamp when the source connection was last updated.", + "title": "Updated At", + "type": "string" + }, + "url": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Long Context Output Credits Per 1000 Tokens" + "description": "URL of the source connection.", + "title": "Url" + } + }, + "required": [ + "id", + "account_id", + "name", + "url", + "source_type", + "polling", + "polling_action", + "polling_max_items", + "content_filter", + "retention", + "pulled_at", + "next_poll_at", + "created_at", + "updated_at" + ], + "title": "SourceResponse", + "type": "object" + }, + "StandaloneTestCompactionRequest": { + "description": "Request body for testing a compaction prompt *without* an existing bank.\n\nUsed on the create-memory-bank page where no bank ID exists yet.\n``compaction_prompt`` is required (no bank to fall back to).\nContent must come from ``sample_entries`` or ``generate_direction``\n(no existing entries to fetch).", + "properties": { + "bank_type": { + "default": "conversation", + "description": "Memory bank type ('conversation' or 'general') \u2014 controls the style of generated entries.", + "title": "Bank Type", + "type": "string" }, - "long_context_threshold": { + "compaction_prompt": { + "description": "Compaction prompt to test.", + "minLength": 1, + "title": "Compaction Prompt", + "type": "string" + }, + "entry_count": { + "default": 5, + "description": "Number of entries to generate when using generate_direction.", + "maximum": 20.0, + "minimum": 2.0, + "title": "Entry Count", + "type": "integer" + }, + "generate_direction": { "anyOf": [ { - "type": "integer" + "maxLength": 2000, + "type": "string" }, { "type": "null" } ], - "title": "Long Context Threshold" + "description": "Direction for the LLM to generate sample entries.", + "title": "Generate Direction" }, - "output_credits_per_1000_tokens": { + "sample_entries": { "anyOf": [ { - "type": "number" + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1, + "type": "array" }, { "type": "null" } ], - "title": "Output Credits Per 1000 Tokens" - }, - "title": { - "title": "Title", - "type": "string" - }, - "value": { - "title": "Value", - "type": "string" - } - }, - "required": [ - "value", - "title", - "default" - ], - "title": "VariantOptionResponse", - "type": "object" - }, - "routers__api__agents__AgentImportPreviewRequest": { - "description": "Dry-run import request \u2014 same payload shape as the export endpoint.", - "properties": { - "agent_definition": { - "additionalProperties": true, - "description": "Payload in the same shape as GET /agents/{agent_id}/export.", - "title": "Agent Definition", - "type": "object" + "description": "Explicit sample entries to compact.", + "title": "Sample Entries" } }, "required": [ - "agent_definition" + "compaction_prompt" ], - "title": "AgentImportPreviewRequest", + "title": "StandaloneTestCompactionRequest", "type": "object" }, - "routers__api__agents__AgentImportPreviewResponse": { - "description": "Summary of a successfully validated import payload (no DB writes).\n\nCounts are derived from the validated payload as supplied \u2014 they\nreflect what was requested, not what would eventually be persisted\n(cross-account skips for recipients and KB names happen later, only\non commit).", + "StartSourceEmbeddingMigrationRequest": { + "description": "Request payload to start a source embedding migration.", "properties": { - "agent_name": { + "chunk_language": { "anyOf": [ { "type": "string" @@ -8113,143 +8299,35 @@ "type": "null" } ], - "description": "Imported agent name, if any.", - "title": "Agent Name" - }, - "alert_configs": { - "description": "Number of alert configs in the payload.", - "title": "Alert Configs", - "type": "integer" + "description": "Language-specific chunking language code", + "title": "Chunk Language" }, - "description": { + "chunk_overlap": { "anyOf": [ { - "type": "string" + "minimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "description": "Imported agent description, if any.", - "title": "Description" - }, - "evaluation_criteria": { - "description": "Number of evaluation criteria in the payload.", - "title": "Evaluation Criteria", - "type": "integer" - }, - "governance_policies": { - "description": "Number of agent-scoped governance policies in the payload.", - "title": "Governance Policies", - "type": "integer" - }, - "ok": { - "description": "Always true on a 200 response; failures use HTTP 422.", - "title": "Ok", - "type": "boolean" + "description": "Override chunk overlap (characters)", + "title": "Chunk Overlap" }, - "payload_export_version": { + "chunk_regex_separators": { "anyOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ], - "description": "Export-format version the payload claims (or ``null`` for legacy payloads). When this differs from ``supported_export_version``, fields may have been silently dropped or defaulted on import.", - "title": "Payload Export Version" - }, - "schedules": { - "description": "Number of trigger schedules in the payload.", - "title": "Schedules", - "type": "integer" - }, - "solutions": { - "default": 0, - "description": "Number of solutions the source agent belonged to. On import these are matched by name in the target account; unmatched names are silently skipped.", - "title": "Solutions", - "type": "integer" - }, - "step_count": { - "description": "Total number of steps in the workflow tree (recursive).", - "title": "Step Count", - "type": "integer" - }, - "supported_export_version": { - "default": "2", - "description": "Export-format version this server understands. Compare against ``payload_export_version`` to detect cross-version imports.", - "title": "Supported Export Version", - "type": "string" - }, - "unresolved_refs": { - "description": "Entity references in the imported workflow that don't exist in the target account. Each entry: {category, ref_id, ref_name?, locations:[step:], alternatives:[{id, name, description?}]}. Pass {source_uuid: target_uuid} as ``entity_remap`` on the create/update call to substitute these references before save.", - "items": { - "additionalProperties": true, - "type": "object" - }, - "title": "Unresolved Refs", - "type": "array" - } - }, - "required": [ - "ok", - "agent_name", - "description", - "step_count", - "schedules", - "alert_configs", - "evaluation_criteria", - "governance_policies" - ], - "title": "AgentImportPreviewResponse", - "type": "object" - }, - "routers__api__agents__AgentListResponse": { - "properties": { - "data": { - "description": "List of agents.", - "items": { - "$ref": "#/components/schemas/AgentSummaryResponse" - }, - "title": "Data", - "type": "array" - }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse" - } - }, - "required": [ - "data", - "pagination" - ], - "title": "AgentListResponse", - "type": "object" - }, - "routers__api__agents__AgentRunListResponse": { - "properties": { - "data": { - "description": "List of agent runs.", - "items": { - "$ref": "#/components/schemas/AgentRunResponse" - }, - "title": "Data", - "type": "array" + "description": "Whether chunk separators are regex patterns", + "title": "Chunk Regex Separators" }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse" - } - }, - "required": [ - "data", - "pagination" - ], - "title": "AgentRunListResponse", - "type": "object" - }, - "routers__api__agents__AgentTraceSearchRequest": { - "properties": { - "agent_id": { + "chunk_separators": { "anyOf": [ { "type": "string" @@ -8258,134 +8336,117 @@ "type": "null" } ], - "description": "Filter by agent ID.", - "title": "Agent Id" - }, - "query": { - "description": "Search query text.", - "title": "Query", - "type": "string" + "description": "Custom chunk separators (JSON-encoded list)", + "title": "Chunk Separators" }, - "run_status": { + "chunk_size": { "anyOf": [ { - "type": "string" + "exclusiveMinimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "description": "Filter by run status.", - "title": "Run Status" + "description": "Override chunk size (characters per chunk)", + "title": "Chunk Size" }, - "step_type": { + "notification_recipients": { "anyOf": [ { - "type": "string" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "description": "Filter by step type.", - "title": "Step Type" + "description": "Optional notification recipient emails", + "title": "Notification Recipients" }, - "top_n": { - "default": 10, - "description": "Maximum number of results.", - "maximum": 100.0, - "minimum": 1.0, - "title": "Top N", + "target_dimensions": { + "description": "Target embedding dimensions", + "exclusiveMinimum": 0.0, + "title": "Target Dimensions", "type": "integer" + }, + "target_embedding_model": { + "description": "Target embedding model \u2014 a `model_type` from `GET /models/embedders`, which also reports the `dimensions` each embedder supports and the modalities it can index.", + "title": "Target Embedding Model", + "type": "string" } }, "required": [ - "query" + "target_embedding_model", + "target_dimensions" ], - "title": "AgentTraceSearchRequest", + "title": "StartSourceEmbeddingMigrationRequest", "type": "object" }, - "routers__api__agents__CreateAgentRequest": { + "TestCompactionRequest": { + "description": "Request body for testing a compaction prompt against an existing bank.\n\nThe user may supply a ``compaction_prompt`` to override (or provide when\nthe bank has none). Content can come from three sources:\n\n1. Existing entries in the bank (default when neither field is set).\n2. ``sample_entries`` \u2013 caller-provided list of strings.\n3. ``generate_direction`` \u2013 an instruction to the LLM to generate sample\n memory entries. Useful for trying a prompt before any real data\n exists.\n\nAt most one of ``sample_entries`` / ``generate_direction`` may be given.", "properties": { - "agent_definition": { + "compaction_prompt": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Optional payload in the same format produced by GET /agents/{id}/export. When provided, replaces any template-derived workflow and pre-fills metadata/trigger fields the request does not specify explicitly. Validation errors include line/column references against a canonical pretty-printed echo of the supplied payload.", - "title": "Agent Definition" + "description": "Compaction prompt to test. Falls back to the bank's current prompt when omitted.", + "title": "Compaction Prompt" }, - "agent_template": { + "entry_count": { + "default": 5, + "description": "Number of entries to generate when using generate_direction.", + "maximum": 20.0, + "minimum": 2.0, + "title": "Entry Count", + "type": "integer" + }, + "generate_direction": { "anyOf": [ { + "maxLength": 2000, "type": "string" }, { "type": "null" } ], - "description": "Template to initialize the agent from. Values: blank, retrieval_example, simple_qa, summarizer, json_extractor, content_change_notifier, scheduled_report, webhook_pipeline.", - "title": "Agent Template" + "description": "Direction for the LLM to generate sample entries (e.g. 'Generate 5 entries about a customer support interaction').", + "title": "Generate Direction" }, - "description": { + "sample_entries": { "anyOf": [ { - "type": "string" + "items": { + "type": "string" + }, + "maxItems": 20, + "minItems": 1, + "type": "array" }, { "type": "null" } ], - "description": "Optional description.", - "title": "Description" - }, - "entity_remap": { - "anyOf": [ - { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Optional UUID-substitution map applied to the imported workflow before save. Each key is a source-account UUID (as returned by /agents/preview-import's ``unresolved_refs``); each value is the target-account UUID to substitute. Used to relink knowledge bases, memory banks, source connections, and sub-agents on cross-account imports.", - "title": "Entity Remap" - }, - "name": { - "description": "Name for the new agent.", - "title": "Name", - "type": "string" - }, - "trigger_type": { - "default": "dynamic_input", - "description": "Trigger type: dynamic_input, template_input, schedule, new_content, email_received.", - "title": "Trigger Type", - "type": "string" + "description": "Explicit sample entries to compact.", + "title": "Sample Entries" } }, - "required": [ - "name" - ], - "title": "CreateAgentRequest", + "title": "TestCompactionRequest", "type": "object" }, - "routers__api__agents__GovernancePolicyRefResponse": { - "description": "Reference to a governance policy by id and name.", + "TestDraftEvaluationRequest": { + "description": "Request body for ephemeral (non-persisted) evaluation testing.\n\nProvide either ``step_output`` (raw text) **or** ``agent_step_run_id``\n(to load output from storage). Exactly one must be supplied.", "properties": { - "policy_id": { - "description": "Governance policy identifier.", - "title": "Policy Id", - "type": "string" - }, - "policy_name": { + "agent_input": { "anyOf": [ { "type": "string" @@ -8394,115 +8455,178 @@ "type": "null" } ], - "description": "Display name of the policy at evaluation time. May be null when the policy has been deleted.", - "title": "Policy Name" - } - }, - "required": [ - "policy_id" - ], - "title": "GovernancePolicyRefResponse", - "type": "object" - }, - "routers__api__agents__SetEmailTriggerConfigRequest": { - "description": "Alias and/or sender allowlist for an EMAIL_RECEIVED trigger.\n\nA field omitted is left unchanged; passing ``null`` (or ``\"\"`` for\n``alias``) clears it.", - "properties": { - "alias": { + "description": "The original agent run input for context. When agent_step_run_id is supplied this is loaded automatically from the parent run if omitted.", + "title": "Agent Input" + }, + "agent_step_run_id": { "anyOf": [ { - "maxLength": 32, + "format": "uuid", "type": "string" }, { "type": "null" } ], - "description": "Custom alias for the address `.@agent.seclai.com` (alphanumeric plus '+', '.', '-'; 1\u201332 chars; not starting/ending with '+', '.', '-'; not UUID-shaped). Pass null/empty to clear.", - "title": "Alias" + "description": "Load step output from this completed step run instead of supplying text.", + "title": "Agent Step Run Id" }, - "allowed_senders": { + "evaluation_prompt": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "string" }, { "type": "null" } ], - "description": "Allowlist of full sender addresses and/or bare domains (a bare domain also matches sub-domains). Empty/null accepts any sender.", - "title": "Allowed Senders" + "title": "Evaluation Prompt" }, - "ignore_auto_generated": { + "evaluation_tier": { "anyOf": [ { - "type": "boolean" + "$ref": "#/components/schemas/AgentEvaluationTier" }, { "type": "null" } - ], - "description": "When true (default for new triggers), machine-generated inbound mail (auto-replies, bulk/list mail, bounces) is dropped before a run to prevent auto-reply loops. Set false to process automated mail.", - "title": "Ignore Auto Generated" + ] }, - "queue_on_quota": { + "expectation_config": { "anyOf": [ { - "type": "boolean" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "When true (default false), inbound mail that exceeds the account's hourly email-trigger rate is parked in a QUEUED run and drained later by the catch-up sweep instead of being failed; when false, over-rate mail fails immediately.", - "title": "Queue On Quota" + "title": "Expectation Config" }, - "require_sender_auth": { + "pass_threshold": { + "default": 0.5, + "maximum": 1.0, + "minimum": 0.0, + "title": "Pass Threshold", + "type": "number" + }, + "step_output": { "anyOf": [ { - "type": "boolean" + "minLength": 1, + "type": "string" }, { "type": "null" } ], - "description": "When true (default for new triggers), the envelope sender must pass SPF or DMARC even on an open inbox (no allowlist); unauthenticated, spoofable mail is rejected. Set false to accept fully unauthenticated mail on an open inbox.", - "title": "Require Sender Auth" + "description": "The step output text to evaluate. Omit if agent_step_run_id is supplied.", + "title": "Step Output" } }, - "title": "SetEmailTriggerConfigRequest", + "title": "TestDraftEvaluationRequest", "type": "object" }, - "routers__api__agents__UpdateAgentRequest": { + "TestDraftEvaluationResponse": { + "description": "Response for an ephemeral evaluation test.", "properties": { - "agent_definition": { + "explanation": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Optional payload in the same format produced by GET /agents/{id}/export. When provided, agent metadata fields the request does not set explicitly are taken from the payload, and the agent's workflow is replaced from `agent.definition`. The previous version is preserved in history. Validation errors include line/column references against a canonical pretty-printed echo of the supplied payload.", - "title": "Agent Definition" + "title": "Explanation" }, - "default_evaluation_tier": { + "passed": { + "title": "Passed", + "type": "boolean" + }, + "score": { + "title": "Score", + "type": "number" + } + }, + "required": [ + "score", + "passed", + "explanation" + ], + "title": "TestDraftEvaluationResponse", + "type": "object" + }, + "UnlinkResourcesRequest": { + "properties": { + "ids": { + "description": "Resource IDs to unlink", + "items": { + "format": "uuid", + "type": "string" + }, + "minItems": 1, + "title": "Ids", + "type": "array" + } + }, + "required": [ + "ids" + ], + "title": "UnlinkResourcesRequest", + "type": "object" + }, + "UnreadCountResponse": { + "properties": { + "count": { + "title": "Count", + "type": "integer" + } + }, + "required": [ + "count" + ], + "title": "UnreadCountResponse", + "type": "object" + }, + "UpdateAgentDefinitionRequest": { + "properties": { + "definition": { + "additionalProperties": true, + "description": "The full agent definition (name, description, tags, steps). Steps form a tree workflow. Each step has a `step_type`, `id`, `name`, and type-specific config. Content enrichment steps (write_metadata, write_content_attachment, load_content_attachment, load_content) require content-triggered agents.", + "title": "Definition", + "type": "object" + }, + "expected_change_id": { + "description": "The change_id from the last GET, for optimistic locking.", + "title": "Expected Change Id", + "type": "string" + } + }, + "required": [ + "expected_change_id", + "definition" + ], + "title": "UpdateAgentDefinitionRequest", + "type": "object" + }, + "UpdateAlertConfigRequest": { + "properties": { + "cooldown_minutes": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "description": "Default evaluation tier: 'fast', 'balanced', or 'thorough'.", - "title": "Default Evaluation Tier" + "description": "Cooldown period in minutes", + "title": "Cooldown Minutes" }, - "description": { + "distribution_type": { "anyOf": [ { "type": "string" @@ -8511,49 +8635,56 @@ "type": "null" } ], - "description": "New description for the agent.", - "title": "Description" + "description": "Distribution type", + "title": "Distribution Type" }, - "entity_remap": { + "enabled": { "anyOf": [ { - "additionalProperties": { - "type": "string" - }, - "type": "object" + "type": "boolean" }, { "type": "null" } ], - "description": "Optional UUID-substitution map applied to the imported workflow before save (same shape as on POST /agents).", - "title": "Entity Remap" + "description": "Whether the alert config is enabled", + "title": "Enabled" }, - "evaluation_mode": { + "recipient_user_ids": { "anyOf": [ { - "type": "string" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "description": "Evaluation mode: 'output_expectation', 'eval_and_retry', or 'sample_and_flag'.", - "title": "Evaluation Mode" + "description": "User IDs for selected_members distribution", + "title": "Recipient User Ids" }, - "max_retries": { + "threshold": { "anyOf": [ { - "type": "integer" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Max retries for eval_and_retry mode (1-10).", - "title": "Max Retries" - }, - "name": { + "description": "Threshold configuration", + "title": "Threshold" + } + }, + "title": "UpdateAlertConfigRequest", + "type": "object" + }, + "UpdateApiVersionRequest": { + "properties": { + "version": { "anyOf": [ { "type": "string" @@ -8562,60 +8693,60 @@ "type": "null" } ], - "description": "New name for the agent.", - "title": "Name" - }, - "prompt_model_auto_rollback_enabled": { - "anyOf": [ - { - "type": "boolean" - }, - { + "description": "A YYYY-MM-DD date to pin the account to, or null to clear the pin (revert to the default baseline).", + "title": "Version" + } + }, + "title": "UpdateApiVersionRequest", + "type": "object" + }, + "UpdateEvaluationCriteriaRequest": { + "description": "Request body for updating an evaluation criteria.\n\nRetry settings and sample frequency are set at the agent level.", + "properties": { + "description": { + "anyOf": [ + { + "type": "string" + }, + { "type": "null" } ], - "description": "Enable or disable automatic rollback for upgraded models.", - "title": "Prompt Model Auto Rollback Enabled" + "title": "Description" }, - "prompt_model_auto_rollback_triggers": { + "enabled": { "anyOf": [ { - "items": { - "type": "string" - }, - "type": "array" + "type": "boolean" }, { "type": "null" } ], - "description": "Failure signals that trigger rollback: agent_eval_fail, governance_flag, governance_block, agent_run_failed.", - "title": "Prompt Model Auto Rollback Triggers" + "title": "Enabled" }, - "prompt_model_auto_upgrade_strategy": { + "evaluation_prompt": { "anyOf": [ { - "$ref": "#/components/schemas/PromptModelAutoUpgradeStrategy" + "type": "string" }, { "type": "null" } ], - "description": "Auto-upgrade strategy: none, early_adopter, middle_of_road, cautious_adopter." + "title": "Evaluation Prompt" }, - "retry_on_failure": { + "evaluation_tier": { "anyOf": [ { - "type": "boolean" + "$ref": "#/components/schemas/AgentEvaluationTier" }, { "type": "null" } - ], - "description": "Whether to retry on evaluation failure.", - "title": "Retry On Failure" + ] }, - "sampling_config": { + "expectation_config": { "anyOf": [ { "additionalProperties": true, @@ -8625,137 +8756,143 @@ "type": "null" } ], - "description": "Sampling configuration for sample_and_flag mode. Format: {combinator: 'and'|'or', rules: [...]}.", - "title": "Sampling Config" - }, - "set_default_evaluation_tier": { - "default": false, - "description": "When true and default_evaluation_tier is omitted, clears the tier to null (system default).", - "title": "Set Default Evaluation Tier", - "type": "boolean" + "title": "Expectation Config" }, - "set_prompt_model_auto_rollback_triggers": { - "default": false, - "description": "When true and prompt_model_auto_rollback_triggers is omitted, clears the list to null (revert to system defaults).", - "title": "Set Prompt Model Auto Rollback Triggers", - "type": "boolean" + "pass_threshold": { + "anyOf": [ + { + "maximum": 1.0, + "minimum": 0.0, + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Pass Threshold" }, - "set_sampling_config": { - "default": false, - "description": "When true and sampling_config is omitted, clears the config to null.", - "title": "Set Sampling Config", - "type": "boolean" + "step_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Step Id" } }, - "title": "UpdateAgentRequest", + "title": "UpdateEvaluationCriteriaRequest", "type": "object" }, - "routers__api__ai_assistant__AiAssistantFeedbackRequest": { - "description": "Request body for submitting AI assistant feedback.", + "UpdateKnowledgeBaseBody": { + "description": "Request body for updating a knowledge base.", "properties": { - "agent_conversation_id": { + "default_score_threshold": { "anyOf": [ { - "format": "uuid", - "type": "string" + "maximum": 1.0, + "minimum": -1.0, + "type": "number" }, { "type": "null" } ], - "description": "Agent conversation ID, if applicable.", - "title": "Agent Conversation Id" + "description": "Prefilled into Minimum Rerank Score on a new retrieval step (-1 to clear).", + "title": "Default Score Threshold" }, - "comment": { + "default_top_k": { "anyOf": [ { - "type": "string" + "maximum": 200.0, + "minimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "description": "Optional comment.", - "title": "Comment" + "description": "Prefilled into Top K on a new retrieval step (0 to clear).", + "title": "Default Top K" }, - "context": { + "default_top_n": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "maximum": 200.0, + "minimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "description": "Additional context.", - "title": "Context" + "description": "Prefilled into Top N on a new retrieval step (0 to clear).", + "title": "Default Top N" }, - "conversation_id": { + "description": { "anyOf": [ { - "format": "uuid", + "maxLength": 1000, "type": "string" }, { "type": "null" } ], - "description": "Conversation ID for the interaction.", - "title": "Conversation Id" + "description": "New description.", + "title": "Description" }, - "feature": { - "description": "Feature name (e.g. 'source', 'solution').", - "title": "Feature", - "type": "string" + "name": { + "anyOf": [ + { + "maxLength": 255, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "New name.", + "title": "Name" }, - "prompt_call_id": { + "reranker_model": { "anyOf": [ { - "format": "uuid", "type": "string" }, { "type": "null" } ], - "description": "Prompt call ID for credit tracking.", - "title": "Prompt Call Id" + "description": "New reranker model \u2014 a `model_type` from `GET /models/rerankers`. Pass \"none\" to turn reranking off (not a value from that list). Omitting the field (or sending null) leaves the current reranker in place \u2014 it does NOT turn it off. \"\" is accepted as a synonym for \"none\", but prefer \"none\": an empty string does not survive every client's serialization.", + "title": "Reranker Model" }, - "rating": { - "description": "Rating: 'thumbs_up' or 'thumbs_down'.", - "title": "Rating", - "type": "string" - } - }, - "required": [ - "feature", - "rating" - ], - "title": "AiAssistantFeedbackRequest", - "type": "object" - }, - "routers__api__alerts__AddCommentRequest": { - "properties": { - "body": { - "description": "Comment text", - "title": "Body", - "type": "string" + "source_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "New list of source connection IDs.", + "title": "Source Ids" } }, - "required": [ - "body" - ], - "title": "AddCommentRequest", + "title": "UpdateKnowledgeBaseBody", "type": "object" }, - "routers__api__alerts__AlertCommentResponse": { + "UpdateMemoryBankBody": { + "description": "Request body for updating a memory bank.\n\nOmitted fields are left unchanged. To **clear** a field back to null,\nsend a zero-value sentinel: ``0`` for integers, ``\"\"`` for strings.", "properties": { - "body": { - "title": "Body", - "type": "string" - }, - "created_at": { + "compaction_prompt": { "anyOf": [ { "type": "string" @@ -8764,153 +8901,107 @@ "type": "null" } ], - "title": "Created At" - }, - "id": { - "title": "Id", - "type": "string" - }, - "user_id": { - "title": "User Id", - "type": "string" + "description": "Custom prompt used when compacting older entries. When set, entries that exceed a threshold are summarized into a new entry before being soft-deleted. Send empty string \"\" to clear and disable summarisation.", + "title": "Compaction Prompt" }, - "user_name": { + "description": { "anyOf": [ { + "maxLength": 1000, "type": "string" }, { "type": "null" } ], - "title": "User Name" - } - }, - "required": [ - "id", - "user_id", - "user_name", - "body", - "created_at" - ], - "title": "AlertCommentResponse", - "type": "object" - }, - "routers__api__alerts__AlertDetailResponse": { - "properties": { - "alert": { - "$ref": "#/components/schemas/routers__api__alerts__AlertResponse" - }, - "comments": { - "items": { - "$ref": "#/components/schemas/routers__api__alerts__AlertCommentResponse" - }, - "title": "Comments", - "type": "array" + "description": "Optional description. Send empty string \"\" to clear.", + "title": "Description" }, - "history": { - "items": { - "$ref": "#/components/schemas/AlertHistoryEntryResponse" - }, - "title": "History", - "type": "array" + "max_age_days": { + "anyOf": [ + { + "minimum": 0.0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "DEPRECATED and no longer applied. Age now belongs solely to retention_days, which deletes; compaction triggers on max_size_tokens and max_turns. Rejected with 400 for clients sending Seclai-Version 2026-08-03 or later, except 0, which clears a value stored earlier. Accepted and stored but inert for older clients.", + "title": "Max Age Days" }, - "subscribers": { - "items": { - "$ref": "#/components/schemas/routers__api__alerts__AlertSubscriberResponse" - }, - "title": "Subscribers", - "type": "array" - } - }, - "required": [ - "alert", - "history", - "comments", - "subscribers" - ], - "title": "AlertDetailResponse", - "type": "object" - }, - "routers__api__alerts__AlertListResponse": { - "description": "``GET /alerts`` \u2014 always the canonical ``{data, pagination}`` envelope.", - "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/routers__api__alerts__AlertResponse" - }, - "title": "Data", - "type": "array" - }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse" - } - }, - "required": [ - "data", - "pagination" - ], - "title": "AlertListResponse", - "type": "object" - }, - "routers__api__alerts__AlertResponse": { - "properties": { - "account_id": { - "title": "Account Id", - "type": "string" - }, - "agent_id": { + "max_size_tokens": { "anyOf": [ { - "type": "string" + "minimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Agent Id" + "description": "Max total tokens (per partition) before compaction. Checked inline after each write and by the hourly background sweep. Send 0 to disable.", + "title": "Max Size Tokens" }, - "agent_run_id": { + "max_turns": { "anyOf": [ { - "type": "string" + "minimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Agent Run Id" + "description": "Max conversation turns (per partition) before compaction. Checked inline after each write and by the hourly background sweep. Send 0 to disable.", + "title": "Max Turns" }, - "alert_config_id": { + "name": { "anyOf": [ { + "maxLength": 255, + "minLength": 1, "type": "string" }, { "type": "null" } ], - "title": "Alert Config Id" - }, - "alert_type": { - "title": "Alert Type", - "type": "string" - }, - "comment_count": { - "title": "Comment Count", - "type": "integer" + "description": "New name.", + "title": "Name" }, - "created_at": { + "retention_days": { "anyOf": [ { - "type": "string" + "minimum": 0.0, + "type": "integer" }, { "type": "null" } ], - "title": "Created At" + "description": "Content source retention in days. Send 0 to clear (indefinite).", + "title": "Retention Days" }, + "strip_quoted_reply_chains": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Conversation banks only. When true, a conversation turn written to this bank has the quoted reply chain an email client prepends to a reply dropped from it. Only inbound (user) turns are affected, and only words in a run of at least ~40 matching a recent turn word for word are dropped (line wrapping and punctuation at a word's edge are ignored). A word the sender changed is kept, including a one-character change inside a link, address or amount, unless the change is only to that edge punctuation.", + "title": "Strip Quoted Reply Chains" + } + }, + "title": "UpdateMemoryBankBody", + "type": "object" + }, + "UpdateSolutionRequest": { + "description": "Request model for updating a solution", + "properties": { "description": { "anyOf": [ { @@ -8920,20 +9011,10 @@ "type": "null" } ], + "description": "Description of the solution", "title": "Description" }, - "details": { - "title": "Details" - }, - "id": { - "title": "Id", - "type": "string" - }, - "is_subscribed": { - "title": "Is Subscribed", - "type": "boolean" - }, - "mcp_client_id": { + "name": { "anyOf": [ { "type": "string" @@ -8942,20 +9023,46 @@ "type": "null" } ], - "title": "Mcp Client Id" + "description": "Name of the solution", + "title": "Name" + } + }, + "title": "UpdateSolutionRequest", + "type": "object" + }, + "UpdateSourceBody": { + "description": "Request body for updating a content source.", + "properties": { + "media_types": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored (see `supported_input_media` on GET /models/embedders); unsupported values are dropped. [] disables media extraction (text-only).", + "title": "Media Types" }, - "source_connection_id": { + "name": { "anyOf": [ { + "maxLength": 255, + "minLength": 1, "type": "string" }, { "type": "null" } ], - "title": "Source Connection Id" + "description": "New name.", + "title": "Name" }, - "source_connection_pull_id": { + "polling": { "anyOf": [ { "type": "string" @@ -8964,57 +9071,33 @@ "type": "null" } ], - "title": "Source Connection Pull Id" - }, - "status": { - "title": "Status", - "type": "string" - }, - "subscriber_count": { - "title": "Subscriber Count", - "type": "integer" - }, - "title": { - "title": "Title", - "type": "string" + "description": "New polling interval.", + "title": "Polling" }, - "updated_at": { + "retention_days": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "title": "Updated At" + "description": "New retention period in days \u2014 content older than this is deleted permanently. Send null to clear the window: content is then kept indefinitely. Omit the field to leave it unchanged.", + "title": "Retention Days" } }, - "required": [ - "id", - "account_id", - "alert_config_id", - "alert_type", - "title", - "description", - "status", - "agent_id", - "agent_run_id", - "source_connection_id", - "source_connection_pull_id", - "mcp_client_id", - "subscriber_count", - "comment_count", - "is_subscribed", - "created_at", - "updated_at" - ], - "title": "AlertResponse", + "title": "UpdateSourceBody", "type": "object" }, - "routers__api__alerts__AlertSubscriberResponse": { + "UploadAgentInputApiResponse": { "properties": { - "created_at": { + "content_type": { + "description": "Resolved MIME type.", + "title": "Content Type", + "type": "string" + }, + "error": { "anyOf": [ { "type": "string" @@ -9023,314 +9106,280 @@ "type": "null" } ], - "title": "Created At" + "description": "Error message if status is failed.", + "title": "Error" + }, + "file_size": { + "description": "Size in bytes.", + "title": "File Size", + "type": "integer" + }, + "filename": { + "description": "Original filename.", + "title": "Filename", + "type": "string" }, "id": { + "description": "Unique identifier for the upload.", "title": "Id", "type": "string" }, - "user_id": { - "title": "User Id", + "status": { + "description": "processing, ready, or failed.", + "title": "Status", "type": "string" - }, - "user_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "User Name" } }, "required": [ "id", - "user_id", - "user_name", - "created_at" + "status", + "filename", + "content_type", + "file_size" ], - "title": "AlertSubscriberResponse", + "title": "UploadAgentInputApiResponse", "type": "object" }, - "routers__api__alerts__OrganizationAlertPreferenceResponse": { + "ValidationError": { "properties": { - "alert_type": { - "title": "Alert Type", + "loc": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "title": "Location", + "type": "array" + }, + "msg": { + "title": "Message", "type": "string" }, - "is_override": { - "title": "Is Override", - "type": "boolean" - }, - "organization_id": { - "title": "Organization Id", + "type": { + "title": "Error Type", "type": "string" - }, - "subscribed": { - "title": "Subscribed", - "type": "boolean" } }, "required": [ - "organization_id", - "alert_type", - "subscribed", - "is_override" + "loc", + "msg", + "type" ], - "title": "OrganizationAlertPreferenceResponse", + "title": "ValidationError", "type": "object" }, - "routers__api__alerts__UpdateOrganizationAlertPreferenceRequest": { + "VariantCategoryResponse": { + "description": "Response model for a variant category", "properties": { - "subscribed": { - "description": "Whether the user should receive this alert for the organization", - "title": "Subscribed", + "category": { + "title": "Category", + "type": "string" + }, + "configurable": { + "title": "Configurable", "type": "boolean" + }, + "description": { + "title": "Description", + "type": "string" + }, + "options": { + "items": { + "$ref": "#/components/schemas/VariantOptionResponse" + }, + "title": "Options", + "type": "array" + }, + "title": { + "title": "Title", + "type": "string" } }, "required": [ - "subscribed" + "category", + "title", + "description", + "configurable", + "options" ], - "title": "UpdateOrganizationAlertPreferenceRequest", + "title": "VariantCategoryResponse", "type": "object" }, - "routers__api__contents__ContentDetailResponse": { - "description": "Response model for content detail.", + "VariantOptionResponse": { + "description": "Response model for a variant option", "properties": { - "content_duration": { + "default": { + "title": "Default", + "type": "boolean" + }, + "description": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Duration of the content in seconds.", - "title": "Content Duration" + "title": "Description" }, - "content_duration_display": { + "input_1h_cache_write_credits_per_1000_tokens": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Display string for content duration.", - "title": "Content Duration Display" - }, - "content_status": { - "description": "Status of the content.", - "title": "Content Status", - "type": "string" - }, - "content_type": { - "description": "Type of the content.", - "title": "Content Type", - "type": "string" - }, - "content_type_display": { - "description": "Display name of the content type.", - "title": "Content Type Display", - "type": "string" - }, - "content_url": { - "description": "URL of the content.", - "title": "Content Url", - "type": "string" + "description": "Credits per 1,000 input tokens written to a 1-hour prompt cache.", + "title": "Input 1H Cache Write Credits Per 1000 Tokens" }, - "content_word_count": { + "input_30m_cache_write_credits_per_1000_tokens": { "anyOf": [ { - "type": "integer" + "type": "number" }, { "type": "null" } ], - "description": "Word count of the content.", - "title": "Content Word Count" + "description": "Credits per 1,000 input tokens written to a 30-minute prompt cache.", + "title": "Input 30M Cache Write Credits Per 1000 Tokens" }, - "description": { + "input_5m_cache_write_credits_per_1000_tokens": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Description of the content.", - "title": "Description" + "description": "Credits per 1,000 input tokens written to a 5-minute prompt cache.", + "title": "Input 5M Cache Write Credits Per 1000 Tokens" }, - "error": { + "input_cache_hit_credits_per_1000_tokens": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Error message, if any.", - "title": "Error" - }, - "id": { - "description": "Unique identifier for the content version.", - "title": "Id", - "type": "string" + "description": "Credits per 1,000 input tokens read from a prompt cache.", + "title": "Input Cache Hit Credits Per 1000 Tokens" }, - "metadata": { + "input_credits_per_1000_tokens": { "anyOf": [ { - "items": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "type": "array" + "type": "number" }, { "type": "null" } ], - "description": "Metadata associated with the content.", - "title": "Metadata" + "title": "Input Credits Per 1000 Tokens" }, - "published_at": { + "long_context_input_cache_hit_credits_per_1000_tokens": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Timestamp when the content was published.", - "title": "Published At" - }, - "pulled_at": { - "description": "Timestamp when the content was pulled.", - "title": "Pulled At", - "type": "string" - }, - "source_connection_content_version_id": { - "description": "ID of the source connection content version.", - "title": "Source Connection Content Version Id", - "type": "string" - }, - "source_connection_id": { - "description": "ID of the source connection.", - "title": "Source Connection Id", - "type": "string" - }, - "source_name": { - "description": "Name of the source.", - "title": "Source Name", - "type": "string" - }, - "source_type": { - "description": "Type of the source.", - "title": "Source Type", - "type": "string" + "description": "Credits per 1,000 input tokens read from a prompt cache, on a call whose input exceeds `long_context_threshold` tokens.", + "title": "Long Context Input Cache Hit Credits Per 1000 Tokens" }, - "text_content": { + "long_context_input_credits_per_1000_tokens": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Text content.", - "title": "Text Content" - }, - "text_content_end": { - "description": "End position of the text content.", - "title": "Text Content End", - "type": "integer" + "title": "Long Context Input Credits Per 1000 Tokens" }, - "text_content_start": { - "description": "Start position of the text content.", - "title": "Text Content Start", - "type": "integer" + "long_context_output_credits_per_1000_tokens": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Long Context Output Credits Per 1000 Tokens" }, - "text_content_total_length": { - "description": "Total length of the text content.", - "title": "Text Content Total Length", - "type": "integer" + "long_context_threshold": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Long Context Threshold" }, - "title": { + "output_credits_per_1000_tokens": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Title of the content.", - "title": "Title" + "title": "Output Credits Per 1000 Tokens" + }, + "title": { + "title": "Title", + "type": "string" + }, + "value": { + "title": "Value", + "type": "string" } }, "required": [ - "id", - "source_connection_content_version_id", - "source_connection_id", - "source_name", - "source_type", + "value", "title", - "content_url", - "content_type", - "content_type_display", - "content_status", - "content_word_count", - "content_duration", - "content_duration_display", - "pulled_at", - "published_at", - "description", - "text_content", - "text_content_start", - "text_content_end", - "text_content_total_length", - "metadata", - "error" + "default" ], - "title": "ContentDetailResponse", + "title": "VariantOptionResponse", "type": "object" }, - "routers__api__contents__ContentEmbeddingsListResponse": { - "description": "Response model for paginated content embeddings.", + "routers__api__agents__AgentImportPreviewRequest": { + "description": "Dry-run import request \u2014 same payload shape as the export endpoint.", "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/ContentEmbeddingResponse" - }, - "title": "Data", - "type": "array" - }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse" + "agent_definition": { + "additionalProperties": true, + "description": "Payload in the same shape as GET /agents/{agent_id}/export.", + "title": "Agent Definition", + "type": "object" } }, "required": [ - "data", - "pagination" + "agent_definition" ], - "title": "ContentEmbeddingsListResponse", + "title": "AgentImportPreviewRequest", "type": "object" }, - "routers__api__contents__FileUploadResponse": { - "description": "Response model for content file replacement upload.", + "routers__api__agents__AgentImportPreviewResponse": { + "description": "Summary of a successfully validated import payload (no DB writes).\n\nCounts are derived from the validated payload as supplied \u2014 they\nreflect what was requested, not what would eventually be persisted\n(cross-account skips for recipients and KB names happen later, only\non commit).", "properties": { - "content_version_id": { + "agent_name": { "anyOf": [ { "type": "string" @@ -9339,15 +9388,15 @@ "type": "null" } ], - "description": "ID of the content version being replaced", - "title": "Content Version Id" + "description": "Imported agent name, if any.", + "title": "Agent Name" }, - "filename": { - "description": "Original filename", - "title": "Filename", - "type": "string" + "alert_configs": { + "description": "Number of alert configs in the payload.", + "title": "Alert Configs", + "type": "integer" }, - "source_connection_content_version_id": { + "description": { "anyOf": [ { "type": "string" @@ -9356,72 +9405,143 @@ "type": "null" } ], - "description": "ID of the source connection content version", - "title": "Source Connection Content Version Id" + "description": "Imported agent description, if any.", + "title": "Description" }, - "status": { - "description": "Processing status", - "title": "Status", + "evaluation_criteria": { + "description": "Number of evaluation criteria in the payload.", + "title": "Evaluation Criteria", + "type": "integer" + }, + "governance_policies": { + "description": "Number of agent-scoped governance policies in the payload.", + "title": "Governance Policies", + "type": "integer" + }, + "ok": { + "description": "Always true on a 200 response; failures use HTTP 422.", + "title": "Ok", + "type": "boolean" + }, + "payload_export_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Export-format version the payload claims (or ``null`` for legacy payloads). When this differs from ``supported_export_version``, fields may have been silently dropped or defaulted on import.", + "title": "Payload Export Version" + }, + "schedules": { + "description": "Number of trigger schedules in the payload.", + "title": "Schedules", + "type": "integer" + }, + "solutions": { + "default": 0, + "description": "Number of solutions the source agent belonged to. On import these are matched by name in the target account; unmatched names are silently skipped.", + "title": "Solutions", + "type": "integer" + }, + "step_count": { + "description": "Total number of steps in the workflow tree (recursive).", + "title": "Step Count", + "type": "integer" + }, + "supported_export_version": { + "default": "2", + "description": "Export-format version this server understands. Compare against ``payload_export_version`` to detect cross-version imports.", + "title": "Supported Export Version", "type": "string" + }, + "unresolved_refs": { + "description": "Entity references in the imported workflow that don't exist in the target account. Each entry: {category, ref_id, ref_name?, locations:[step:], alternatives:[{id, name, description?}]}. Pass {source_uuid: target_uuid} as ``entity_remap`` on the create/update call to substitute these references before save.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Unresolved Refs", + "type": "array" } }, "required": [ - "content_version_id", - "source_connection_content_version_id", - "filename", - "status" + "ok", + "agent_name", + "description", + "step_count", + "schedules", + "alert_configs", + "evaluation_criteria", + "governance_policies" ], - "title": "FileUploadResponse", + "title": "AgentImportPreviewResponse", "type": "object" }, - "routers__api__docs_search__DocsSearchResponse": { - "description": "Ranked results, NOT a paginated collection \u2014 the ``{results}`` shape is a\ndeliberate carve-out matching the MCP ``search_docs`` tool.", + "routers__api__agents__AgentListResponse": { "properties": { - "results": { + "data": { + "description": "List of agents.", "items": { - "$ref": "#/components/schemas/DocsSearchResultResponse" + "$ref": "#/components/schemas/AgentSummaryResponse" }, - "title": "Results", + "title": "Data", "type": "array" + }, + "pagination": { + "$ref": "#/components/schemas/PaginationResponse" } }, "required": [ - "results" + "data", + "pagination" ], - "title": "DocsSearchResponse", + "title": "AgentListResponse", "type": "object" }, - "routers__api__governance__GovernanceAiAssistantRequest": { - "description": "Request body for the governance AI assistant.", + "routers__api__agents__AgentRunListResponse": { "properties": { - "user_input": { - "description": "Natural-language request for the governance AI assistant.", - "title": "User Input", - "type": "string" + "data": { + "description": "List of agent runs.", + "items": { + "$ref": "#/components/schemas/AgentRunResponse" + }, + "title": "Data", + "type": "array" + }, + "pagination": { + "$ref": "#/components/schemas/PaginationResponse" } }, "required": [ - "user_input" + "data", + "pagination" ], - "title": "GovernanceAiAssistantRequest", + "title": "AgentRunListResponse", "type": "object" }, - "routers__api__governance__GovernanceConversationResponse": { - "description": "A governance AI assistant conversation entry.", + "routers__api__agents__AgentTraceSearchRequest": { "properties": { - "accepted": { + "agent_id": { "anyOf": [ { - "type": "boolean" + "type": "string" }, { "type": "null" } ], - "description": "True if accepted, false if declined, null if pending.", - "title": "Accepted" + "description": "Filter by agent ID.", + "title": "Agent Id" }, - "ai_response": { + "query": { + "description": "Search query text.", + "title": "Query", + "type": "string" + }, + "run_status": { "anyOf": [ { "type": "string" @@ -9430,68 +9550,39 @@ "type": "null" } ], - "description": "The AI assistant's response note, or null.", - "title": "Ai Response" - }, - "created_at": { - "description": "ISO 8601 creation timestamp.", - "title": "Created At", - "type": "string" - }, - "id": { - "description": "Conversation ID.", - "title": "Id", - "type": "string" + "description": "Filter by run status.", + "title": "Run Status" }, - "proposed_actions": { + "step_type": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "JSON of proposed actions, or null.", - "title": "Proposed Actions" + "description": "Filter by step type.", + "title": "Step Type" }, - "user_input": { - "description": "The original user request.", - "title": "User Input", - "type": "string" - } - }, - "required": [ - "id", - "user_input", - "ai_response", - "proposed_actions", - "accepted", - "created_at" - ], - "title": "GovernanceConversationResponse", - "type": "object" - }, - "routers__api__memory_banks__MemoryBankAcceptRequest": { - "description": "Accept or decline a memory bank AI suggestion.", - "properties": { - "accepted": { - "description": "Whether the user accepted the proposed configuration.", - "title": "Accepted", - "type": "boolean" + "top_n": { + "default": 10, + "description": "Maximum number of results.", + "maximum": 100.0, + "minimum": 1.0, + "title": "Top N", + "type": "integer" } }, "required": [ - "accepted" + "query" ], - "title": "MemoryBankAcceptRequest", + "title": "AgentTraceSearchRequest", "type": "object" }, - "routers__api__memory_banks__MemoryBankAiAssistantRequest": { - "description": "Request body for the memory bank AI assistant.", + "routers__api__agents__CreateAgentRequest": { "properties": { - "current_config": { + "agent_definition": { "anyOf": [ { "additionalProperties": true, @@ -9501,213 +9592,180 @@ "type": "null" } ], - "description": "Current configuration to refine, if any.", - "title": "Current Config" + "description": "Optional payload in the same format produced by GET /agents/{id}/export. When provided, replaces any template-derived workflow and pre-fills metadata/trigger fields the request does not specify explicitly. Validation errors include line/column references against a canonical pretty-printed echo of the supplied payload.", + "title": "Agent Definition" }, - "history_since": { + "agent_template": { "anyOf": [ { - "format": "date-time", "type": "string" }, { "type": "null" } ], - "description": "Optional ISO 8601 timestamp. When set, only conversation turns created at or after this timestamp are loaded as context, scoping history to the current session so the assistant remembers earlier turns in a multi-turn refinement.", - "title": "History Since" + "description": "Template to initialize the agent from. Values: blank, retrieval_example, simple_qa, summarizer, json_extractor, content_change_notifier, scheduled_report, webhook_pipeline.", + "title": "Agent Template" }, - "user_input": { - "description": "Natural-language description of the memory bank.", - "title": "User Input", - "type": "string" - } - }, - "required": [ - "user_input" - ], - "title": "MemoryBankAiAssistantRequest", - "type": "object" - }, - "routers__api__memory_banks__MemoryBankConversationTurnResponse": { - "description": "A single turn of memory bank AI assistant conversation.", - "properties": { - "accepted": { + "description": { "anyOf": [ { - "type": "boolean" + "type": "string" }, { "type": "null" } ], - "description": "Whether the user accepted this proposal.", - "title": "Accepted" + "description": "Optional description.", + "title": "Description" }, - "ai_note": { + "entity_remap": { "anyOf": [ { - "type": "string" + "additionalProperties": { + "type": "string" + }, + "type": "object" }, { "type": "null" } ], - "description": "AI note from this turn.", - "title": "Ai Note" + "description": "Optional UUID-substitution map applied to the imported workflow before save. Each key is a source-account UUID (as returned by /agents/preview-import's ``unresolved_refs``); each value is the target-account UUID to substitute. Used to relink knowledge bases, memory banks, source connections, and sub-agents on cross-account imports.", + "title": "Entity Remap" }, - "conversation_id": { - "description": "Unique ID for this conversation turn.", - "title": "Conversation Id", + "name": { + "description": "Name for the new agent.", + "title": "Name", "type": "string" }, - "resulting_config": { + "trigger_type": { + "default": "dynamic_input", + "description": "Trigger type: dynamic_input, template_input, schedule, new_content, email_received.", + "title": "Trigger Type", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "CreateAgentRequest", + "type": "object" + }, + "routers__api__agents__GovernancePolicyRefResponse": { + "description": "Reference to a governance policy by id and name.", + "properties": { + "policy_id": { + "description": "Governance policy identifier.", + "title": "Policy Id", + "type": "string" + }, + "policy_name": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "The proposed configuration from this turn.", - "title": "Resulting Config" - }, - "user_input": { - "description": "User input for this turn.", - "title": "User Input", - "type": "string" + "description": "Display name of the policy at evaluation time. May be null when the policy has been deleted.", + "title": "Policy Name" } }, "required": [ - "user_input", - "conversation_id" + "policy_id" ], - "title": "MemoryBankConversationTurnResponse", + "title": "GovernancePolicyRefResponse", "type": "object" }, - "routers__api__memory_banks__MemoryBankLastConversationResponse": { - "description": "Response for fetching memory bank conversation history.", + "routers__api__agents__SetEmailTriggerConfigRequest": { + "description": "Alias and/or sender allowlist for an EMAIL_RECEIVED trigger.\n\nA field omitted is left unchanged; passing ``null`` (or ``\"\"`` for\n``alias``) clears it.", "properties": { - "accepted": { + "alias": { "anyOf": [ { - "type": "boolean" + "maxLength": 32, + "type": "string" }, { "type": "null" } ], - "description": "Whether the user accepted the last proposal.", - "title": "Accepted" + "description": "Custom alias, unique per account, answering as `.@agent.seclai.com` and as `@` on each verified account email domain (alphanumeric plus '+', '.', '-'; 1\u201332 chars; not starting/ending with '+', '.', '-'; not UUID-shaped). Pass null/empty to clear.", + "title": "Alias" }, - "ai_note": { + "allowed_senders": { "anyOf": [ { - "type": "string" + "items": { + "type": "string" + }, + "type": "array" }, { "type": "null" } ], - "description": "AI note from the most recent turn.", - "title": "Ai Note" - }, - "total": { - "default": 0, - "description": "Total conversation turns.", - "title": "Total", - "type": "integer" + "description": "Allowlist of full sender addresses and/or bare domains (a bare domain also matches sub-domains). Empty/null accepts any sender.", + "title": "Allowed Senders" }, - "turns": { - "description": "Recent conversation turns (oldest first).", - "items": { - "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankConversationTurnResponse" - }, - "title": "Turns", - "type": "array" + "ignore_auto_generated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "When true (default for new triggers), machine-generated inbound mail (auto-replies, bulk/list mail, bounces) is dropped before a run to prevent auto-reply loops. Set false to process automated mail.", + "title": "Ignore Auto Generated" }, - "user_input": { + "queue_on_quota": { "anyOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ], - "description": "Most recent user input.", - "title": "User Input" - } - }, - "title": "MemoryBankLastConversationResponse", - "type": "object" - }, - "routers__api__model_lifecycle__ModelAlertListResponse": { - "description": "``GET /models/alerts`` legacy/default shape; 2026-07-27+ clients get the\ncanonical ``{data, pagination}`` envelope (bypasses this ``response_model``).", - "properties": { - "alerts": { - "items": { - "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelAlertResponse" - }, - "title": "Alerts", - "type": "array" + "description": "When true (default false), inbound mail that exceeds the account's hourly email-trigger rate is parked in a QUEUED run and drained later by the catch-up sweep instead of being failed; when false, over-rate mail fails immediately.", + "title": "Queue On Quota" }, - "total": { - "title": "Total", - "type": "integer" + "require_sender_auth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "When true (default for new triggers), the envelope sender must pass SPF or DMARC even on an open inbox (no allowlist); unauthenticated, spoofable mail is rejected. Set false to accept fully unauthenticated mail on an open inbox.", + "title": "Require Sender Auth" } }, - "required": [ - "alerts", - "total" - ], - "title": "ModelAlertListResponse", + "title": "SetEmailTriggerConfigRequest", "type": "object" }, - "routers__api__model_lifecycle__ModelAlertResponse": { + "routers__api__agents__UpdateAgentRequest": { "properties": { - "account_id": { - "title": "Account Id", - "type": "string" - }, - "agent_id": { + "agent_definition": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Agent Id" - }, - "alert_type": { - "title": "Alert Type", - "type": "string" - }, - "created_at": { - "title": "Created At", - "type": "string" - }, - "id": { - "title": "Id", - "type": "string" - }, - "message": { - "title": "Message", - "type": "string" - }, - "model_name": { - "title": "Model Name", - "type": "string" - }, - "prompt_model_id": { - "title": "Prompt Model Id", - "type": "string" + "description": "Optional payload in the same format produced by GET /agents/{id}/export. When provided, agent metadata fields the request does not set explicitly are taken from the payload, and the agent's workflow is replaced from `agent.definition`. The previous version is preserved in history. Validation errors include line/column references against a canonical pretty-printed echo of the supplied payload.", + "title": "Agent Definition" }, - "read_at": { + "default_evaluation_tier": { "anyOf": [ { "type": "string" @@ -9716,9 +9774,10 @@ "type": "null" } ], - "title": "Read At" + "description": "Default evaluation tier: 'fast', 'balanced', or 'thorough'.", + "title": "Default Evaluation Tier" }, - "successor_model_name": { + "description": { "anyOf": [ { "type": "string" @@ -9727,42 +9786,25 @@ "type": "null" } ], - "title": "Successor Model Name" - } - }, - "required": [ - "id", - "account_id", - "agent_id", - "prompt_model_id", - "model_name", - "alert_type", - "message", - "read_at", - "successor_model_name", - "created_at" - ], - "title": "ModelAlertResponse", - "type": "object" - }, - "routers__api__model_lifecycle__ModelRecommendationResponse": { - "properties": { - "deprecated_at": { + "description": "New description for the agent.", + "title": "Description" + }, + "entity_remap": { "anyOf": [ { - "type": "string" + "additionalProperties": { + "type": "string" + }, + "type": "object" }, { "type": "null" } ], - "title": "Deprecated At" - }, - "description": { - "title": "Description", - "type": "string" + "description": "Optional UUID-substitution map applied to the imported workflow before save (same shape as on POST /agents).", + "title": "Entity Remap" }, - "family": { + "evaluation_mode": { "anyOf": [ { "type": "string" @@ -9771,52 +9813,22 @@ "type": "null" } ], - "title": "Family" + "description": "Evaluation mode: 'output_expectation', 'eval_and_retry', or 'sample_and_flag'.", + "title": "Evaluation Mode" }, - "family_generation": { + "max_retries": { "anyOf": [ { - "type": "number" + "type": "integer" }, { "type": "null" } ], - "title": "Family Generation" - }, - "id": { - "title": "Id", - "type": "string" - }, - "max_context_tokens": { - "title": "Max Context Tokens", - "type": "integer" - }, - "max_output_tokens": { - "title": "Max Output Tokens", - "type": "integer" - }, - "model_id": { - "title": "Model Id", - "type": "string" + "description": "Max retries for eval_and_retry mode (1-10).", + "title": "Max Retries" }, "name": { - "title": "Name", - "type": "string" - }, - "provider": { - "title": "Provider", - "type": "string" - }, - "reason": { - "title": "Reason", - "type": "string" - }, - "recommendation_type": { - "title": "Recommendation Type", - "type": "string" - }, - "released_at": { "anyOf": [ { "type": "string" @@ -9825,185 +9837,111 @@ "type": "null" } ], - "title": "Released At" + "description": "New name for the agent.", + "title": "Name" }, - "sunset_at": { + "prompt_model_auto_rollback_enabled": { "anyOf": [ { - "type": "string" + "type": "boolean" }, { "type": "null" } ], - "title": "Sunset At" - }, - "supports_openai_arguments": { - "title": "Supports Openai Arguments", - "type": "boolean" - }, - "supports_streaming": { - "title": "Supports Streaming", - "type": "boolean" - }, - "supports_structured_output": { - "title": "Supports Structured Output", - "type": "boolean" - }, - "supports_thinking": { - "title": "Supports Thinking", - "type": "boolean" - }, - "supports_tool_use": { - "title": "Supports Tool Use", - "type": "boolean" - } - }, - "required": [ - "id", - "model_id", - "name", - "provider", - "description", - "max_context_tokens", - "max_output_tokens", - "supports_tool_use", - "supports_structured_output", - "supports_thinking", - "supports_openai_arguments", - "supports_streaming", - "recommendation_type", - "reason" - ], - "title": "ModelRecommendationResponse", - "type": "object" - }, - "routers__api__model_lifecycle__ModelRecommendationsResponse": { - "properties": { - "alternatives": { - "items": { - "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" - }, - "title": "Alternatives", - "type": "array" - }, - "current_model_id": { - "title": "Current Model Id", - "type": "string" + "description": "Enable or disable automatic rollback for upgraded models.", + "title": "Prompt Model Auto Rollback Enabled" }, - "current_model_name": { - "title": "Current Model Name", - "type": "string" + "prompt_model_auto_rollback_triggers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Failure signals that trigger rollback: agent_eval_fail, governance_flag, governance_block, agent_run_failed.", + "title": "Prompt Model Auto Rollback Triggers" }, - "same_provider": { - "items": { - "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" - }, - "title": "Same Provider", - "type": "array" + "prompt_model_auto_upgrade_strategy": { + "anyOf": [ + { + "$ref": "#/components/schemas/PromptModelAutoUpgradeStrategy" + }, + { + "type": "null" + } + ], + "description": "Auto-upgrade strategy: none, early_adopter, middle_of_road, cautious_adopter." }, - "successor": { + "retry_on_failure": { "anyOf": [ { - "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" + "type": "boolean" }, { "type": "null" } - ] + ], + "description": "Whether to retry on evaluation failure.", + "title": "Retry On Failure" }, - "upgrades": { - "items": { - "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" - }, - "title": "Upgrades", - "type": "array" - } - }, - "required": [ - "current_model_id", - "current_model_name", - "upgrades", - "same_provider", - "alternatives" - ], - "title": "ModelRecommendationsResponse", - "type": "object" - }, - "routers__api__search__SearchResponse": { - "description": "Ranked results, NOT a paginated collection \u2014 the ``{results}`` shape is a\ndeliberate carve-out matching the MCP ``search_resources`` tool.", - "properties": { - "results": { - "items": { - "$ref": "#/components/schemas/routers__api__search__SearchResultResponse" - }, - "title": "Results", - "type": "array" - } - }, - "required": [ - "results" - ], - "title": "SearchResponse", - "type": "object" - }, - "routers__api__search__SearchResultResponse": { - "properties": { - "description": { + "sampling_config": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Description" + "description": "Sampling configuration for sample_and_flag mode. Format: {combinator: 'and'|'or', rules: [...]}.", + "title": "Sampling Config" }, - "entity_type": { - "title": "Entity Type", - "type": "string" + "set_default_evaluation_tier": { + "default": false, + "description": "When true and default_evaluation_tier is omitted, clears the tier to null (system default).", + "title": "Set Default Evaluation Tier", + "type": "boolean" }, - "id": { - "title": "Id", - "type": "string" + "set_prompt_model_auto_rollback_triggers": { + "default": false, + "description": "When true and prompt_model_auto_rollback_triggers is omitted, clears the list to null (revert to system defaults).", + "title": "Set Prompt Model Auto Rollback Triggers", + "type": "boolean" }, - "name": { - "title": "Name", - "type": "string" + "set_sampling_config": { + "default": false, + "description": "When true and sampling_config is omitted, clears the config to null.", + "title": "Set Sampling Config", + "type": "boolean" } }, - "required": [ - "id", - "entity_type", - "name", - "description" - ], - "title": "SearchResultResponse", + "title": "UpdateAgentRequest", "type": "object" }, - "routers__api__solutions__AiAssistantAcceptRequest": { - "description": "Request body for accepting a proposed plan.", + "routers__api__ai_assistant__AiAssistantFeedbackRequest": { + "description": "Request body for submitting AI assistant feedback.", "properties": { - "confirm_deletions": { - "default": false, - "description": "Must be true when the plan contains destructive actions", - "title": "Confirm Deletions", - "type": "boolean" - }, - "solution_description": { + "agent_conversation_id": { "anyOf": [ { + "format": "uuid", "type": "string" }, { "type": "null" } ], - "description": "When running in standalone mode (no pre-existing solution), provide a description for the auto-created solution.", - "title": "Solution Description" + "description": "Agent conversation ID, if applicable.", + "title": "Agent Conversation Id" }, - "solution_name": { + "comment": { "anyOf": [ { "type": "string" @@ -10012,171 +9950,182 @@ "type": "null" } ], - "description": "When running in standalone mode (no pre-existing solution), provide a name to auto-create a solution and link resources.", - "title": "Solution Name" - } - }, - "title": "AiAssistantAcceptRequest", - "type": "object" - }, - "routers__api__solutions__AiAssistantGenerateRequest": { - "description": "Request body for AI assistant generate endpoints.", - "properties": { - "history_since": { + "description": "Optional comment.", + "title": "Comment" + }, + "context": { "anyOf": [ { - "format": "date-time", - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Optional ISO 8601 timestamp. When set, only conversation turns created at or after this timestamp are loaded as context, scoping history to the current session so the assistant remembers earlier turns in a create flow.", - "title": "History Since" + "description": "Additional context.", + "title": "Context" }, - "user_input": { - "description": "User input describing what to do", - "title": "User Input", - "type": "string" - } - }, - "required": [ - "user_input" - ], - "title": "AiAssistantGenerateRequest", - "type": "object" - }, - "routers__api__solutions__SolutionAgentResponse": { - "properties": { - "id": { - "format": "uuid", - "title": "Id", - "type": "string" - }, - "knowledge_base_ids": { - "description": "Knowledge base IDs connected to this agent via triggers.", - "items": { - "format": "uuid", - "type": "string" - }, - "title": "Knowledge Base Ids", - "type": "array" - }, - "name": { - "title": "Name", - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "title": "SolutionAgentResponse", - "type": "object" - }, - "routers__api__solutions__SolutionConversationResponse": { - "description": "Response model for a conversation turn.", - "properties": { - "accepted": { + "conversation_id": { "anyOf": [ { - "type": "boolean" + "format": "uuid", + "type": "string" }, { "type": "null" } ], - "description": "Whether the suggestion was accepted or declined.", - "title": "Accepted" + "description": "Conversation ID for the interaction.", + "title": "Conversation Id" }, - "actions_taken": { + "feature": { + "description": "Feature name (e.g. 'source', 'solution').", + "title": "Feature", + "type": "string" + }, + "governance_conversation_id": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "format": "uuid", + "type": "string" }, { "type": "null" } ], - "description": "Actions taken by the AI.", - "title": "Actions Taken" + "description": "Governance conversation ID, if applicable.", + "title": "Governance Conversation Id" }, - "ai_response": { + "prompt_call_id": { "anyOf": [ { + "format": "uuid", "type": "string" }, { "type": "null" } ], - "description": "AI response text.", - "title": "Ai Response" + "description": "Prompt call ID for credit tracking.", + "title": "Prompt Call Id" }, - "created_at": { - "description": "Timestamp when the conversation was created.", - "title": "Created At", + "rating": { + "description": "Rating: 'thumbs_up' or 'thumbs_down'.", + "title": "Rating", + "type": "string" + } + }, + "required": [ + "feature", + "rating" + ], + "title": "AiAssistantFeedbackRequest", + "type": "object" + }, + "routers__api__alerts__AddCommentRequest": { + "properties": { + "body": { + "description": "Comment text", + "title": "Body", + "type": "string" + } + }, + "required": [ + "body" + ], + "title": "AddCommentRequest", + "type": "object" + }, + "routers__api__alerts__AlertCommentResponse": { + "properties": { + "body": { + "title": "Body", "type": "string" }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created At" + }, "id": { - "description": "Unique identifier for the conversation turn.", - "format": "uuid", "title": "Id", "type": "string" }, - "user_input": { - "description": "User input text.", - "title": "User Input", + "user_id": { + "title": "User Id", "type": "string" + }, + "user_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "User Name" } }, "required": [ "id", - "user_input", - "ai_response", - "actions_taken", - "accepted", + "user_id", + "user_name", + "body", "created_at" ], - "title": "SolutionConversationResponse", + "title": "AlertCommentResponse", "type": "object" }, - "routers__api__solutions__SolutionKnowledgeBaseResponse": { + "routers__api__alerts__AlertDetailResponse": { "properties": { - "id": { - "format": "uuid", - "title": "Id", - "type": "string" + "alert": { + "$ref": "#/components/schemas/routers__api__alerts__AlertResponse" }, - "name": { - "title": "Name", - "type": "string" + "comments": { + "items": { + "$ref": "#/components/schemas/routers__api__alerts__AlertCommentResponse" + }, + "title": "Comments", + "type": "array" }, - "source_connection_ids": { - "description": "Source connection IDs linked to this knowledge base.", + "history": { "items": { - "format": "uuid", - "type": "string" + "$ref": "#/components/schemas/AlertHistoryEntryResponse" }, - "title": "Source Connection Ids", + "title": "History", + "type": "array" + }, + "subscribers": { + "items": { + "$ref": "#/components/schemas/routers__api__alerts__AlertSubscriberResponse" + }, + "title": "Subscribers", "type": "array" } }, "required": [ - "id", - "name" + "alert", + "history", + "comments", + "subscribers" ], - "title": "SolutionKnowledgeBaseResponse", + "title": "AlertDetailResponse", "type": "object" }, - "routers__api__solutions__SolutionListResponse": { - "description": "Response model for paginated solution list.", + "routers__api__alerts__AlertListResponse": { + "description": "``GET /alerts`` \u2014 always the canonical ``{data, pagination}`` envelope.", "properties": { "data": { "items": { - "$ref": "#/components/schemas/SolutionSummaryResponse" + "$ref": "#/components/schemas/routers__api__alerts__AlertResponse" }, "title": "Data", "type": "array" @@ -10189,123 +10138,57 @@ "data", "pagination" ], - "title": "SolutionListResponse", + "title": "AlertListResponse", "type": "object" }, - "routers__api__solutions__SolutionResponse": { - "description": "Response model for solution data.", + "routers__api__alerts__AlertResponse": { "properties": { - "agents": { - "description": "Agents linked to the solution.", - "items": { - "$ref": "#/components/schemas/routers__api__solutions__SolutionAgentResponse" - }, - "title": "Agents", - "type": "array" - }, - "created_at": { - "description": "Timestamp when the solution was created.", - "title": "Created At", - "type": "string" - }, - "description": { - "description": "Description of the solution.", - "title": "Description", - "type": "string" - }, - "id": { - "description": "Unique identifier for the solution.", - "format": "uuid", - "title": "Id", - "type": "string" - }, - "knowledge_bases": { - "description": "Knowledge bases linked to the solution.", - "items": { - "$ref": "#/components/schemas/routers__api__solutions__SolutionKnowledgeBaseResponse" - }, - "title": "Knowledge Bases", - "type": "array" - }, - "name": { - "description": "Name of the solution.", - "title": "Name", + "account_id": { + "title": "Account Id", "type": "string" }, - "source_connections": { - "description": "Source connections linked to the solution.", - "items": { - "$ref": "#/components/schemas/SolutionSourceConnectionResponse" - }, - "title": "Source Connections", - "type": "array" - }, - "updated_at": { - "description": "Timestamp when the solution was last updated.", - "title": "Updated At", - "type": "string" - } - }, - "required": [ - "id", - "name", - "description", - "agents", - "knowledge_bases", - "source_connections", - "created_at", - "updated_at" - ], - "title": "SolutionResponse", - "type": "object" - }, - "routers__api__source_exports__CreateExportRequest": { - "description": "Parameters for creating a new export job.", - "properties": { - "date_from": { + "agent_id": { "anyOf": [ { - "format": "date-time", "type": "string" }, { "type": "null" } ], - "description": "Only include content created on or after this timestamp.", - "title": "Date From" + "title": "Agent Id" }, - "date_to": { + "agent_run_id": { "anyOf": [ { - "format": "date-time", "type": "string" }, { "type": "null" } ], - "description": "Only include content created on or before this timestamp.", - "title": "Date To" - }, - "format": { - "$ref": "#/components/schemas/ExportFormat", - "description": "Output file format (jsonl, csv, parquet, zip)." + "title": "Agent Run Id" }, - "metadata_filter": { + "alert_config_id": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "JSONB containment filter applied to content metadata.", - "title": "Metadata Filter" + "title": "Alert Config Id" }, - "query_filter": { + "alert_type": { + "title": "Alert Type", + "type": "string" + }, + "comment_count": { + "title": "Comment Count", + "type": "integer" + }, + "created_at": { "anyOf": [ { "type": "string" @@ -10314,63 +10197,53 @@ "type": "null" } ], - "description": "Title substring filter (case-insensitive ILIKE).", - "title": "Query Filter" - } - }, - "required": [ - "format" - ], - "title": "CreateExportRequest", - "type": "object" - }, - "routers__api__source_exports__EstimateExportRequest": { - "description": "Parameters for estimating export size.", - "properties": { - "date_from": { + "title": "Created At" + }, + "description": { "anyOf": [ { - "format": "date-time", "type": "string" }, { "type": "null" } ], - "description": "Only include content created on or after this timestamp.", - "title": "Date From" + "title": "Description" }, - "date_to": { + "details": { + "title": "Details" + }, + "id": { + "title": "Id", + "type": "string" + }, + "is_subscribed": { + "title": "Is Subscribed", + "type": "boolean" + }, + "mcp_client_id": { "anyOf": [ { - "format": "date-time", "type": "string" }, { "type": "null" } ], - "description": "Only include content created on or before this timestamp.", - "title": "Date To" - }, - "format": { - "$ref": "#/components/schemas/ExportFormat", - "description": "Output file format." + "title": "Mcp Client Id" }, - "metadata_filter": { + "source_connection_id": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "JSONB containment filter applied to content metadata.", - "title": "Metadata Filter" + "title": "Source Connection Id" }, - "query_filter": { + "source_connection_pull_id": { "anyOf": [ { "type": "string" @@ -10379,63 +10252,21 @@ "type": "null" } ], - "description": "Title substring filter (case-insensitive ILIKE).", - "title": "Query Filter" - } - }, - "required": [ - "format" - ], - "title": "EstimateExportRequest", - "type": "object" - }, - "routers__api__source_exports__EstimateExportResponse": { - "description": "Rough size estimate for a potential export.", - "properties": { - "estimated_size_bytes": { - "description": "Estimated export file size in bytes.", - "title": "Estimated Size Bytes", - "type": "integer" + "title": "Source Connection Pull Id" }, - "source_connection_id": { - "description": "Source connection ID.", - "title": "Source Connection Id", - "type": "string" - } - }, - "required": [ - "estimated_size_bytes", - "source_connection_id" - ], - "title": "EstimateExportResponse", - "type": "object" - }, - "routers__api__source_exports__ExportResponse": { - "description": "Status and metadata for a content source export job.", - "properties": { - "account_id": { - "description": "Owning account ID.", - "title": "Account Id", + "status": { + "title": "Status", "type": "string" }, - "completed_at": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Completion time.", - "title": "Completed At" + "subscriber_count": { + "title": "Subscriber Count", + "type": "integer" }, - "created_at": { - "description": "Creation time.", - "title": "Created At", + "title": { + "title": "Title", "type": "string" }, - "date_from": { + "updated_at": { "anyOf": [ { "type": "string" @@ -10444,10 +10275,34 @@ "type": "null" } ], - "description": "Date-from filter applied to this export.", - "title": "Date From" - }, - "date_to": { + "title": "Updated At" + } + }, + "required": [ + "id", + "account_id", + "alert_config_id", + "alert_type", + "title", + "description", + "status", + "agent_id", + "agent_run_id", + "source_connection_id", + "source_connection_pull_id", + "mcp_client_id", + "subscriber_count", + "comment_count", + "is_subscribed", + "created_at", + "updated_at" + ], + "title": "AlertResponse", + "type": "object" + }, + "routers__api__alerts__AlertSubscriberResponse": { + "properties": { + "created_at": { "anyOf": [ { "type": "string" @@ -10456,15 +10311,17 @@ "type": "null" } ], - "description": "Date-to filter applied to this export.", - "title": "Date To" + "title": "Created At" }, - "destination": { - "description": "Storage destination.", - "title": "Destination", + "id": { + "title": "Id", "type": "string" }, - "error": { + "user_id": { + "title": "User Id", + "type": "string" + }, + "user_name": { "anyOf": [ { "type": "string" @@ -10473,10 +10330,64 @@ "type": "null" } ], - "description": "Error message if failed.", - "title": "Error" + "title": "User Name" + } + }, + "required": [ + "id", + "user_id", + "user_name", + "created_at" + ], + "title": "AlertSubscriberResponse", + "type": "object" + }, + "routers__api__alerts__OrganizationAlertPreferenceResponse": { + "properties": { + "alert_type": { + "title": "Alert Type", + "type": "string" }, - "estimated_size_bytes": { + "is_override": { + "title": "Is Override", + "type": "boolean" + }, + "organization_id": { + "title": "Organization Id", + "type": "string" + }, + "subscribed": { + "title": "Subscribed", + "type": "boolean" + } + }, + "required": [ + "organization_id", + "alert_type", + "subscribed", + "is_override" + ], + "title": "OrganizationAlertPreferenceResponse", + "type": "object" + }, + "routers__api__alerts__UpdateOrganizationAlertPreferenceRequest": { + "properties": { + "subscribed": { + "description": "Whether the user should receive this alert for the organization", + "title": "Subscribed", + "type": "boolean" + } + }, + "required": [ + "subscribed" + ], + "title": "UpdateOrganizationAlertPreferenceRequest", + "type": "object" + }, + "routers__api__contents__ContentDetailResponse": { + "description": "Response model for content detail.", + "properties": { + "content_duration": { "anyOf": [ { "type": "integer" @@ -10485,10 +10396,10 @@ "type": "null" } ], - "description": "Pre-run size estimate.", - "title": "Estimated Size Bytes" + "description": "Duration of the content in seconds.", + "title": "Content Duration" }, - "expires_at": { + "content_duration_display": { "anyOf": [ { "type": "string" @@ -10497,32 +10408,30 @@ "type": "null" } ], - "description": "Download expiry time.", - "title": "Expires At" - }, - "file_size_bytes": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "File size in bytes.", - "title": "File Size Bytes" + "description": "Display string for content duration.", + "title": "Content Duration Display" }, - "format": { - "description": "Output format.", - "title": "Format", + "content_status": { + "description": "Status of the content.", + "title": "Content Status", "type": "string" }, - "id": { - "description": "Export job ID.", - "title": "Id", + "content_type": { + "description": "Type of the content.", + "title": "Content Type", "type": "string" }, - "item_count": { + "content_type_display": { + "description": "Display name of the content type.", + "title": "Content Type Display", + "type": "string" + }, + "content_url": { + "description": "URL of the content.", + "title": "Content Url", + "type": "string" + }, + "content_word_count": { "anyOf": [ { "type": "integer" @@ -10531,35 +10440,40 @@ "type": "null" } ], - "description": "Items exported.", - "title": "Item Count" + "description": "Word count of the content.", + "title": "Content Word Count" }, - "metadata_filter": { + "description": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Metadata filter applied to this export.", - "title": "Metadata Filter" + "description": "Description of the content.", + "title": "Description" }, - "progress_current": { + "error": { "anyOf": [ { - "type": "integer" + "type": "string" }, { "type": "null" } ], - "description": "Items processed so far.", - "title": "Progress Current" + "description": "Error message, if any.", + "title": "Error" }, - "progress_total": { + "extracted_media_capped": { + "default": false, + "description": "True when extraction stopped with media still unread, so the item references more media than was indexed and media search will not match anything past the cut. Two causes: a web page that ran out of the budget for fetching remote assets, or a container that could not be read to the end (a truncated or hostile archive). An uploaded document that reads cleanly is never capped, however much media it holds \u2014 there is no limit on that.", + "title": "Extracted Media Capped", + "type": "boolean" + }, + "extracted_media_count": { "anyOf": [ { "type": "integer" @@ -10568,34 +10482,45 @@ "type": "null" } ], - "description": "Total items to process.", - "title": "Progress Total" + "description": "Number of embedded images / videos extracted from inside this item and indexed as their own chunks. There is no limit on this \u2014 a document contributes as many as it holds. Null when there is no media record for the item: the extraction pass has not run, does not apply to this container, or found nothing. Treat null as 'unknown', never as zero.", + "title": "Extracted Media Count" }, - "query_filter": { + "extracted_media_limit": { "anyOf": [ { - "type": "string" + "type": "integer" }, { "type": "null" } ], - "description": "Query filter applied to this export.", - "title": "Query Filter" + "description": "The bound that was reached, when extracted_media_capped is true and the stop was a bound \u2014 a number of fetch attempts, or a number of seconds. Null when extraction was not capped, or when it stopped because the container could not be read rather than because a bound fired.", + "title": "Extracted Media Limit" }, - "requested_by_user_id": { + "id": { + "description": "Unique identifier for the content version.", + "title": "Id", + "type": "string" + }, + "metadata": { "anyOf": [ { - "type": "string" + "items": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "type": "array" }, { "type": "null" } ], - "description": "ID of the user who requested this export.", - "title": "Requested By User Id" + "description": "Metadata associated with the content.", + "title": "Metadata" }, - "requested_by_user_name": { + "published_at": { "anyOf": [ { "type": "string" @@ -10604,15 +10529,35 @@ "type": "null" } ], - "description": "Name of the user who requested this export.", - "title": "Requested By User Name" + "description": "Timestamp when the content was published.", + "title": "Published At" + }, + "pulled_at": { + "description": "Timestamp when the content was pulled.", + "title": "Pulled At", + "type": "string" + }, + "source_connection_content_version_id": { + "description": "ID of the source connection content version.", + "title": "Source Connection Content Version Id", + "type": "string" }, "source_connection_id": { - "description": "Source connection ID.", + "description": "ID of the source connection.", "title": "Source Connection Id", "type": "string" }, - "started_at": { + "source_name": { + "description": "Name of the source.", + "title": "Source Name", + "type": "string" + }, + "source_type": { + "description": "Type of the source.", + "title": "Source Type", + "type": "string" + }, + "text_content": { "anyOf": [ { "type": "string" @@ -10621,15 +10566,25 @@ "type": "null" } ], - "description": "Processing start time.", - "title": "Started At" + "description": "Text content.", + "title": "Text Content" }, - "status": { - "description": "Job status.", - "title": "Status", - "type": "string" + "text_content_end": { + "description": "End position of the text content.", + "title": "Text Content End", + "type": "integer" }, - "storage_key": { + "text_content_start": { + "description": "Start position of the text content.", + "title": "Text Content Start", + "type": "integer" + }, + "text_content_total_length": { + "description": "Total length of the text content.", + "title": "Text Content Total Length", + "type": "integer" + }, + "title": { "anyOf": [ { "type": "string" @@ -10638,30 +10593,60 @@ "type": "null" } ], - "description": "S3 key of exported file.", - "title": "Storage Key" - }, - "updated_at": { - "description": "Last update time.", - "title": "Updated At", - "type": "string" + "description": "Title of the content.", + "title": "Title" } }, "required": [ "id", + "source_connection_content_version_id", "source_connection_id", - "account_id", - "format", - "destination", - "status", - "created_at", - "updated_at" + "source_name", + "source_type", + "title", + "content_url", + "content_type", + "content_type_display", + "content_status", + "content_word_count", + "content_duration", + "content_duration_display", + "pulled_at", + "published_at", + "description", + "text_content", + "text_content_start", + "text_content_end", + "text_content_total_length", + "metadata", + "error" ], - "title": "ExportResponse", + "title": "ContentDetailResponse", "type": "object" }, - "routers__api__sources__FileUploadResponse": { - "description": "Response model for file upload", + "routers__api__contents__ContentEmbeddingsListResponse": { + "description": "Response model for paginated content embeddings.", + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/ContentEmbeddingResponse" + }, + "title": "Data", + "type": "array" + }, + "pagination": { + "$ref": "#/components/schemas/PaginationResponse" + } + }, + "required": [ + "data", + "pagination" + ], + "title": "ContentEmbeddingsListResponse", + "type": "object" + }, + "routers__api__contents__FileUploadResponse": { + "description": "Response model for content file replacement upload.", "properties": { "content_version_id": { "anyOf": [ @@ -10672,7 +10657,7 @@ "type": "null" } ], - "description": "ID of the created content version", + "description": "ID of the newly created content version. A replacement creates a new version rather than overwriting the previous one.", "title": "Content Version Id" }, "embedder_warning": { @@ -10684,7 +10669,7 @@ "type": "null" } ], - "description": "Set when the file is non-text but the source's embedder is text-only \u2014 indexing will rely on OCR / transcription and may produce a FAILED row if no text can be extracted.", + "description": "Set when the file's type is not embedded directly on this source, so indexing relies on extracted text. Content with none (e.g. a photograph) will be marked FAILED.", "title": "Embedder Warning" }, "filename": { @@ -10701,11 +10686,11 @@ "type": "null" } ], - "description": "ID of the duplicate source connection content version", + "description": "ID of the source connection content version. Unchanged by a replacement, so it stays a stable handle for the content.", "title": "Source Connection Content Version Id" }, "status": { - "description": "Processing status", + "description": "Always `uploaded`. Unlike the create endpoints, a replacement is never rejected as a duplicate of another item.", "title": "Status", "type": "string" } @@ -10719,102 +10704,177 @@ "title": "FileUploadResponse", "type": "object" }, - "routers__api__sources__SourceListResponse": { - "description": "Response model for paginated source list", + "routers__api__docs_search__DocsSearchResponse": { + "description": "Ranked results, NOT a paginated collection \u2014 the ``{results}`` shape is a\ndeliberate carve-out matching the MCP ``search_docs`` tool.", "properties": { - "data": { + "results": { "items": { - "$ref": "#/components/schemas/SourceResponse" + "$ref": "#/components/schemas/DocsSearchResultResponse" }, - "title": "Data", + "title": "Results", "type": "array" - }, - "pagination": { - "$ref": "#/components/schemas/PaginationResponse" } }, "required": [ - "data", - "pagination" + "results" ], - "title": "SourceListResponse", + "title": "DocsSearchResponse", "type": "object" }, - "schemas__model_responses__PromptModelResponse": { - "description": "Response model for prompt model data", + "routers__api__governance__GovernanceAiAssistantRequest": { + "description": "Request body for the governance AI assistant.", "properties": { - "default": { - "title": "Default", - "type": "boolean" - }, - "deprecated_at": { + "user_input": { + "description": "Natural-language request for the governance AI assistant.", + "title": "User Input", + "type": "string" + } + }, + "required": [ + "user_input" + ], + "title": "GovernanceAiAssistantRequest", + "type": "object" + }, + "routers__api__governance__GovernanceConversationResponse": { + "description": "A governance AI assistant conversation entry.", + "properties": { + "accepted": { "anyOf": [ { - "format": "date-time", - "type": "string" + "type": "boolean" }, { "type": "null" } ], - "title": "Deprecated At" + "description": "True if accepted, false if declined, null if pending.", + "title": "Accepted" }, - "description": { - "title": "Description", + "ai_response": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The AI assistant's response note, or null.", + "title": "Ai Response" + }, + "created_at": { + "description": "ISO 8601 creation timestamp.", + "title": "Created At", "type": "string" }, - "enabled": { - "title": "Enabled", - "type": "boolean" + "id": { + "description": "Conversation ID.", + "title": "Id", + "type": "string" }, - "family": { + "proposed_actions": { "anyOf": [ { - "type": "string" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Family" + "description": "JSON of proposed actions, or null.", + "title": "Proposed Actions" }, - "family_generation": { + "user_input": { + "description": "The original user request.", + "title": "User Input", + "type": "string" + } + }, + "required": [ + "id", + "user_input", + "ai_response", + "proposed_actions", + "accepted", + "created_at" + ], + "title": "GovernanceConversationResponse", + "type": "object" + }, + "routers__api__memory_banks__MemoryBankAcceptRequest": { + "description": "Accept or decline a memory bank AI suggestion.", + "properties": { + "accepted": { + "description": "Whether the user accepted the proposed configuration.", + "title": "Accepted", + "type": "boolean" + } + }, + "required": [ + "accepted" + ], + "title": "MemoryBankAcceptRequest", + "type": "object" + }, + "routers__api__memory_banks__MemoryBankAiAssistantRequest": { + "description": "Request body for the memory bank AI assistant.", + "properties": { + "current_config": { "anyOf": [ { - "type": "number" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "title": "Family Generation" + "description": "Current configuration to refine, if any.", + "title": "Current Config" }, - "generation_credits_per_unit": { + "history_since": { "anyOf": [ { - "type": "number" + "format": "date-time", + "type": "string" }, { "type": "null" } ], - "description": "Per-unit credit cost for a dedicated media-generation model, in the unit named by ``generation_params.pricing_unit`` (per image / per second / per character / per output token). Multiply by the produced unit count (images, seconds, characters) for the run cost. None for token-billed (non-generation) models.", - "title": "Generation Credits Per Unit" + "description": "Optional ISO 8601 timestamp. When set, only conversation turns created at or after this timestamp are loaded as context, scoping history to the current session so the assistant remembers earlier turns in a multi-turn refinement.", + "title": "History Since" }, - "generation_params": { + "user_input": { + "description": "Natural-language description of the memory bank.", + "title": "User Input", + "type": "string" + } + }, + "required": [ + "user_input" + ], + "title": "MemoryBankAiAssistantRequest", + "type": "object" + }, + "routers__api__memory_banks__MemoryBankConversationTurnResponse": { + "description": "A single turn of memory bank AI assistant conversation.", + "properties": { + "accepted": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "boolean" }, { "type": "null" } ], - "description": "Media-generation descriptor (modality, pricing_unit, and modality-specific constraints). NULL for text LLMs; present for image/audio/video generation models. See schemas.generation_params.", - "title": "Generation Params" + "description": "Whether the user accepted this proposal.", + "title": "Accepted" }, - "generation_unit_label": { + "ai_note": { "anyOf": [ { "type": "string" @@ -10823,124 +10883,201 @@ "type": "null" } ], - "description": "Human suffix for the per-unit generation rate (e.g. ``/image``, ``/second``, ``/1k chars``, ``/1k tokens``) \u2014 single-sourced from the pricing unit so clients render cost without re-deriving the mapping. None for non-generation models. Char/token rates are shown per 1,000 (the ``/1k \u2026`` suffix), so scale ``generation_credits_per_unit`` accordingly for those units.", - "title": "Generation Unit Label" + "description": "AI note from this turn.", + "title": "Ai Note" }, - "id": { - "title": "Id", + "conversation_id": { + "description": "Unique ID for this conversation turn.", + "title": "Conversation Id", "type": "string" }, - "image_generation_tool_credits_per_image": { + "resulting_config": { "anyOf": [ { - "type": "number" + "additionalProperties": true, + "type": "object" }, { "type": "null" } ], - "description": "Per-image credit cost of using the built-in image_generation tool (it runs gpt-image-1). Set only for models that actually support the tool (tool-use capable); None otherwise.", - "title": "Image Generation Tool Credits Per Image" + "description": "The proposed configuration from this turn.", + "title": "Resulting Config" }, - "input_1h_cache_write_credits_per_1000_tokens": { + "user_input": { + "description": "User input for this turn.", + "title": "User Input", + "type": "string" + } + }, + "required": [ + "user_input", + "conversation_id" + ], + "title": "MemoryBankConversationTurnResponse", + "type": "object" + }, + "routers__api__memory_banks__MemoryBankLastConversationResponse": { + "description": "Response for fetching memory bank conversation history.", + "properties": { + "accepted": { "anyOf": [ { - "type": "number" + "type": "boolean" }, { "type": "null" } ], - "title": "Input 1H Cache Write Credits Per 1000 Tokens" + "description": "Whether the user accepted the last proposal.", + "title": "Accepted" }, - "input_5m_cache_write_credits_per_1000_tokens": { + "ai_note": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Input 5M Cache Write Credits Per 1000 Tokens" + "description": "AI note from the most recent turn.", + "title": "Ai Note" }, - "input_cache_hit_credits_per_1000_tokens": { + "total": { + "default": 0, + "description": "Total conversation turns.", + "title": "Total", + "type": "integer" + }, + "turns": { + "description": "Recent conversation turns (oldest first).", + "items": { + "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankConversationTurnResponse" + }, + "title": "Turns", + "type": "array" + }, + "user_input": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Input Cache Hit Credits Per 1000 Tokens" + "description": "Most recent user input.", + "title": "User Input" + } + }, + "title": "MemoryBankLastConversationResponse", + "type": "object" + }, + "routers__api__model_lifecycle__ModelAlertListResponse": { + "description": "``GET /models/alerts`` legacy/default shape; 2026-07-27+ clients get the\ncanonical ``{data, pagination}`` envelope (bypasses this ``response_model``).", + "properties": { + "alerts": { + "items": { + "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelAlertResponse" + }, + "title": "Alerts", + "type": "array" }, - "input_credits_per_1000_tokens": { + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "alerts", + "total" + ], + "title": "ModelAlertListResponse", + "type": "object" + }, + "routers__api__model_lifecycle__ModelAlertResponse": { + "properties": { + "account_id": { + "title": "Account Id", + "type": "string" + }, + "agent_id": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Input Credits Per 1000 Tokens" - }, - "is_new": { - "default": false, - "title": "Is New", - "type": "boolean" + "title": "Agent Id" }, - "last_used": { - "default": false, - "title": "Last Used", - "type": "boolean" + "alert_type": { + "title": "Alert Type", + "type": "string" }, - "max_context_tokens": { - "title": "Max Context Tokens", - "type": "integer" + "created_at": { + "title": "Created At", + "type": "string" }, - "max_conversation_length": { - "title": "Max Conversation Length", - "type": "integer" + "id": { + "title": "Id", + "type": "string" }, - "max_output_tokens": { - "title": "Max Output Tokens", - "type": "integer" + "message": { + "title": "Message", + "type": "string" }, - "model_id": { - "title": "Model Id", + "model_name": { + "title": "Model Name", "type": "string" }, - "name": { - "title": "Name", + "prompt_model_id": { + "title": "Prompt Model Id", "type": "string" }, - "output_credits_per_1000_tokens": { + "read_at": { "anyOf": [ { - "type": "number" + "type": "string" }, { "type": "null" } ], - "title": "Output Credits Per 1000 Tokens" + "title": "Read At" }, - "payload_schema": { + "successor_model_name": { "anyOf": [ { - "additionalProperties": true, - "type": "object" + "type": "string" }, { "type": "null" } ], - "description": "Model-specific JSON schema for advanced prompt_call json_template payloads.", - "title": "Payload Schema" - }, - "payload_schema_source_url": { + "title": "Successor Model Name" + } + }, + "required": [ + "id", + "account_id", + "agent_id", + "prompt_model_id", + "model_name", + "alert_type", + "message", + "read_at", + "successor_model_name", + "created_at" + ], + "title": "ModelAlertResponse", + "type": "object" + }, + "routers__api__model_lifecycle__ModelRecommendationResponse": { + "properties": { + "deprecated_at": { "anyOf": [ { "type": "string" @@ -10949,33 +11086,23 @@ "type": "null" } ], - "description": "Source URL used to derive payload_schema guidance for this model.", - "title": "Payload Schema Source Url" - }, - "per_modality_rates": { - "items": { - "$ref": "#/components/schemas/ModalityRateResponse" - }, - "title": "Per Modality Rates", - "type": "array" + "title": "Deprecated At" }, - "provider": { - "title": "Provider", + "description": { + "title": "Description", "type": "string" }, - "released_at": { + "effort_options": { "anyOf": [ { - "format": "date-time", - "type": "string" + "$ref": "#/components/schemas/EffortOptionsResponse" }, { "type": "null" } - ], - "title": "Released At" + ] }, - "schema_documentation_url": { + "family": { "anyOf": [ { "type": "string" @@ -10984,22 +11111,52 @@ "type": "null" } ], - "description": "Model documentation URL with request/response payload details.", - "title": "Schema Documentation Url" + "title": "Family" }, - "schema_notes": { + "family_generation": { "anyOf": [ { - "type": "string" + "type": "number" }, { "type": "null" } ], - "description": "Human-readable notes about request payload compatibility.", - "title": "Schema Notes" + "title": "Family Generation" }, - "successor_model_id": { + "id": { + "title": "Id", + "type": "string" + }, + "max_context_tokens": { + "title": "Max Context Tokens", + "type": "integer" + }, + "max_output_tokens": { + "title": "Max Output Tokens", + "type": "integer" + }, + "model_id": { + "title": "Model Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "provider": { + "title": "Provider", + "type": "string" + }, + "reason": { + "title": "Reason", + "type": "string" + }, + "recommendation_type": { + "title": "Recommendation Type", + "type": "string" + }, + "released_at": { "anyOf": [ { "type": "string" @@ -11008,12 +11165,11 @@ "type": "null" } ], - "title": "Successor Model Id" + "title": "Released At" }, "sunset_at": { "anyOf": [ { - "format": "date-time", "type": "string" }, { @@ -11022,302 +11178,2491 @@ ], "title": "Sunset At" }, - "supported_input_media": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Supported Input Media" - }, - "supported_languages": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Supported Languages" - }, - "supported_output_media": { - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Supported Output Media" - }, "supports_openai_arguments": { - "default": false, "title": "Supports Openai Arguments", "type": "boolean" }, "supports_streaming": { - "default": false, "title": "Supports Streaming", "type": "boolean" }, "supports_structured_output": { - "default": true, "title": "Supports Structured Output", "type": "boolean" }, "supports_thinking": { - "default": false, "title": "Supports Thinking", "type": "boolean" }, "supports_tool_use": { - "default": true, "title": "Supports Tool Use", "type": "boolean" - }, - "tools_disabled": { + } + }, + "required": [ + "id", + "model_id", + "name", + "provider", + "description", + "max_context_tokens", + "max_output_tokens", + "supports_tool_use", + "supports_structured_output", + "supports_thinking", + "supports_openai_arguments", + "supports_streaming", + "recommendation_type", + "reason" + ], + "title": "ModelRecommendationResponse", + "type": "object" + }, + "routers__api__model_lifecycle__ModelRecommendationsResponse": { + "properties": { + "alternatives": { "items": { - "$ref": "#/components/schemas/PromptToolResponse" + "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" }, - "title": "Tools Disabled", + "title": "Alternatives", "type": "array" }, - "tools_enabled": { + "current_model_id": { + "title": "Current Model Id", + "type": "string" + }, + "current_model_name": { + "title": "Current Model Name", + "type": "string" + }, + "same_provider": { "items": { - "$ref": "#/components/schemas/PromptToolResponse" + "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" }, - "title": "Tools Enabled", + "title": "Same Provider", "type": "array" }, - "training_cutoff_at": { - "anyOf": [ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Training Cutoff At" - }, - "url": { + "successor": { "anyOf": [ { - "type": "string" + "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" }, { "type": "null" } - ], - "title": "Url" + ] }, - "variants": { - "anyOf": [ - { - "items": { - "$ref": "#/components/schemas/VariantCategoryResponse" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Variants" + "upgrades": { + "items": { + "$ref": "#/components/schemas/routers__api__model_lifecycle__ModelRecommendationResponse" + }, + "title": "Upgrades", + "type": "array" } }, "required": [ - "id", - "model_id", - "name", - "description", - "enabled", - "default", - "provider", - "max_context_tokens", - "max_output_tokens", - "max_conversation_length" + "current_model_id", + "current_model_name", + "upgrades", + "same_provider", + "alternatives" ], - "title": "PromptModelResponse", + "title": "ModelRecommendationsResponse", "type": "object" }, - "schemas__model_responses__ProviderGroupResponse": { - "description": "Response model for provider group with models", + "routers__api__search__SearchResponse": { + "description": "Ranked results, NOT a paginated collection \u2014 the ``{results}`` shape is a\ndeliberate carve-out matching the MCP ``search_resources`` tool.", "properties": { - "models": { + "results": { "items": { - "$ref": "#/components/schemas/schemas__model_responses__PromptModelResponse" + "$ref": "#/components/schemas/routers__api__search__SearchResultResponse" }, - "title": "Models", + "title": "Results", "type": "array" - }, - "provider": { - "title": "Provider", - "type": "string" } }, "required": [ - "provider", - "models" + "results" ], - "title": "ProviderGroupResponse", + "title": "SearchResponse", "type": "object" }, - "schemas__v1__agent_evaluations__NonManualEvaluationModeStatResponse": { - "description": "Per-mode rollup for evaluation activity.", + "routers__api__search__SearchResultResponse": { "properties": { - "failed": { - "title": "Failed", - "type": "integer" + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" }, - "failure_rate": { - "title": "Failure Rate", - "type": "number" + "entity_type": { + "title": "Entity Type", + "type": "string" }, - "flagged": { - "title": "Flagged", - "type": "integer" + "id": { + "title": "Id", + "type": "string" }, - "mode": { - "title": "Mode", + "name": { + "title": "Name", "type": "string" + } + }, + "required": [ + "id", + "entity_type", + "name", + "description" + ], + "title": "SearchResultResponse", + "type": "object" + }, + "routers__api__solutions__AiAssistantAcceptRequest": { + "description": "Request body for accepting a proposed plan.", + "properties": { + "confirm_deletions": { + "default": false, + "description": "Must be true when the plan contains destructive actions", + "title": "Confirm Deletions", + "type": "boolean" }, - "pass_rate": { - "title": "Pass Rate", - "type": "number" + "solution_description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When running in standalone mode (no pre-existing solution), provide a description for the auto-created solution.", + "title": "Solution Description" }, - "passed": { - "title": "Passed", - "type": "integer" + "solution_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "When running in standalone mode (no pre-existing solution), provide a name to auto-create a solution and link resources.", + "title": "Solution Name" + } + }, + "title": "AiAssistantAcceptRequest", + "type": "object" + }, + "routers__api__solutions__AiAssistantGenerateRequest": { + "description": "Request body for AI assistant generate endpoints.", + "properties": { + "history_since": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional ISO 8601 timestamp. When set, only conversation turns created at or after this timestamp are loaded as context, scoping history to the current session so the assistant remembers earlier turns in a create flow.", + "title": "History Since" }, - "total": { - "title": "Total", - "type": "integer" + "user_input": { + "description": "User input describing what to do", + "title": "User Input", + "type": "string" } }, "required": [ - "mode", - "total", - "passed", - "failed", - "flagged", - "pass_rate", - "failure_rate" + "user_input" ], - "title": "NonManualEvaluationModeStatResponse", + "title": "AiAssistantGenerateRequest", "type": "object" }, - "schemas__v1__agent_evaluations__NonManualEvaluationSummaryResponse": { - "description": "Account-level summary for evaluations.", + "routers__api__solutions__SolutionAgentResponse": { "properties": { - "by_mode": { + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + }, + "knowledge_base_ids": { + "description": "Knowledge base IDs connected to this agent via triggers.", "items": { - "$ref": "#/components/schemas/schemas__v1__agent_evaluations__NonManualEvaluationModeStatResponse" + "format": "uuid", + "type": "string" }, - "title": "By Mode", + "title": "Knowledge Base Ids", "type": "array" }, - "failed": { - "title": "Failed", - "type": "integer" + "name": { + "title": "Name", + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "title": "SolutionAgentResponse", + "type": "object" + }, + "routers__api__solutions__SolutionConversationResponse": { + "description": "Response model for a conversation turn.", + "properties": { + "accepted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Whether the suggestion was accepted or declined.", + "title": "Accepted" }, - "failure_rate": { - "title": "Failure Rate", - "type": "number" + "actions_taken": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Actions taken by the AI.", + "title": "Actions Taken" }, - "flagged": { - "title": "Flagged", - "type": "integer" + "ai_response": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "AI response text.", + "title": "Ai Response" }, - "pass_rate": { - "title": "Pass Rate", - "type": "number" + "created_at": { + "description": "Timestamp when the conversation was created.", + "title": "Created At", + "type": "string" }, - "passed": { - "title": "Passed", - "type": "integer" + "id": { + "description": "Unique identifier for the conversation turn.", + "format": "uuid", + "title": "Id", + "type": "string" + }, + "user_input": { + "description": "User input text.", + "title": "User Input", + "type": "string" + } + }, + "required": [ + "id", + "user_input", + "ai_response", + "actions_taken", + "accepted", + "created_at" + ], + "title": "SolutionConversationResponse", + "type": "object" + }, + "routers__api__solutions__SolutionKnowledgeBaseResponse": { + "properties": { + "id": { + "format": "uuid", + "title": "Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "source_connection_ids": { + "description": "Source connection IDs linked to this knowledge base.", + "items": { + "format": "uuid", + "type": "string" + }, + "title": "Source Connection Ids", + "type": "array" + } + }, + "required": [ + "id", + "name" + ], + "title": "SolutionKnowledgeBaseResponse", + "type": "object" + }, + "routers__api__solutions__SolutionListResponse": { + "description": "Response model for paginated solution list.", + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/SolutionSummaryResponse" + }, + "title": "Data", + "type": "array" + }, + "pagination": { + "$ref": "#/components/schemas/PaginationResponse" + } + }, + "required": [ + "data", + "pagination" + ], + "title": "SolutionListResponse", + "type": "object" + }, + "routers__api__solutions__SolutionResponse": { + "description": "Response model for solution data.", + "properties": { + "agents": { + "description": "Agents linked to the solution.", + "items": { + "$ref": "#/components/schemas/routers__api__solutions__SolutionAgentResponse" + }, + "title": "Agents", + "type": "array" + }, + "created_at": { + "description": "Timestamp when the solution was created.", + "title": "Created At", + "type": "string" + }, + "description": { + "description": "Description of the solution.", + "title": "Description", + "type": "string" + }, + "id": { + "description": "Unique identifier for the solution.", + "format": "uuid", + "title": "Id", + "type": "string" + }, + "knowledge_bases": { + "description": "Knowledge bases linked to the solution.", + "items": { + "$ref": "#/components/schemas/routers__api__solutions__SolutionKnowledgeBaseResponse" + }, + "title": "Knowledge Bases", + "type": "array" + }, + "name": { + "description": "Name of the solution.", + "title": "Name", + "type": "string" + }, + "source_connections": { + "description": "Source connections linked to the solution.", + "items": { + "$ref": "#/components/schemas/SolutionSourceConnectionResponse" + }, + "title": "Source Connections", + "type": "array" + }, + "updated_at": { + "description": "Timestamp when the solution was last updated.", + "title": "Updated At", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "agents", + "knowledge_bases", + "source_connections", + "created_at", + "updated_at" + ], + "title": "SolutionResponse", + "type": "object" + }, + "routers__api__source_exports__CreateExportRequest": { + "description": "Parameters for creating a new export job.", + "properties": { + "date_from": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include content created on or after this timestamp.", + "title": "Date From" + }, + "date_to": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include content created on or before this timestamp.", + "title": "Date To" + }, + "format": { + "$ref": "#/components/schemas/ExportFormat", + "description": "Output file format (jsonl, csv, parquet, zip)." + }, + "metadata_filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "JSONB containment filter applied to content metadata.", + "title": "Metadata Filter" + }, + "query_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Title substring filter (case-insensitive ILIKE).", + "title": "Query Filter" + } + }, + "required": [ + "format" + ], + "title": "CreateExportRequest", + "type": "object" + }, + "routers__api__source_exports__EstimateExportRequest": { + "description": "Parameters for estimating export size.", + "properties": { + "date_from": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include content created on or after this timestamp.", + "title": "Date From" + }, + "date_to": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include content created on or before this timestamp.", + "title": "Date To" + }, + "format": { + "$ref": "#/components/schemas/ExportFormat", + "description": "Output file format." + }, + "metadata_filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "JSONB containment filter applied to content metadata.", + "title": "Metadata Filter" + }, + "query_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Title substring filter (case-insensitive ILIKE).", + "title": "Query Filter" + } + }, + "required": [ + "format" + ], + "title": "EstimateExportRequest", + "type": "object" + }, + "routers__api__source_exports__EstimateExportResponse": { + "description": "Rough size estimate for a potential export.", + "properties": { + "estimated_size_bytes": { + "description": "Estimated export file size in bytes.", + "title": "Estimated Size Bytes", + "type": "integer" + }, + "source_connection_id": { + "description": "Source connection ID.", + "title": "Source Connection Id", + "type": "string" + } + }, + "required": [ + "estimated_size_bytes", + "source_connection_id" + ], + "title": "EstimateExportResponse", + "type": "object" + }, + "routers__api__source_exports__ExportResponse": { + "description": "Status and metadata for a content source export job.", + "properties": { + "account_id": { + "description": "Owning account ID.", + "title": "Account Id", + "type": "string" + }, + "completed_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Completion time.", + "title": "Completed At" + }, + "created_at": { + "description": "Creation time.", + "title": "Created At", + "type": "string" + }, + "date_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Date-from filter applied to this export.", + "title": "Date From" + }, + "date_to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Date-to filter applied to this export.", + "title": "Date To" + }, + "destination": { + "description": "Storage destination.", + "title": "Destination", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Error message if failed.", + "title": "Error" + }, + "estimated_size_bytes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Pre-run size estimate.", + "title": "Estimated Size Bytes" + }, + "expires_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Download expiry time.", + "title": "Expires At" + }, + "file_size_bytes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "File size in bytes.", + "title": "File Size Bytes" + }, + "format": { + "description": "Output format.", + "title": "Format", + "type": "string" + }, + "id": { + "description": "Export job ID.", + "title": "Id", + "type": "string" + }, + "item_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Items exported.", + "title": "Item Count" + }, + "metadata_filter": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Metadata filter applied to this export.", + "title": "Metadata Filter" + }, + "progress_current": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Items processed so far.", + "title": "Progress Current" + }, + "progress_total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Total items to process.", + "title": "Progress Total" + }, + "query_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Query filter applied to this export.", + "title": "Query Filter" + }, + "requested_by_user_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ID of the user who requested this export.", + "title": "Requested By User Id" + }, + "requested_by_user_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Name of the user who requested this export.", + "title": "Requested By User Name" + }, + "source_connection_id": { + "description": "Source connection ID.", + "title": "Source Connection Id", + "type": "string" + }, + "started_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Processing start time.", + "title": "Started At" + }, + "status": { + "description": "Job status.", + "title": "Status", + "type": "string" + }, + "storage_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "S3 key of exported file.", + "title": "Storage Key" + }, + "updated_at": { + "description": "Last update time.", + "title": "Updated At", + "type": "string" + } + }, + "required": [ + "id", + "source_connection_id", + "account_id", + "format", + "destination", + "status", + "created_at", + "updated_at" + ], + "title": "ExportResponse", + "type": "object" + }, + "routers__api__sources__FileUploadResponse": { + "description": "Response model for file upload", + "properties": { + "content_version_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ID of the created content version, and what the source content status endpoints take. Set when `status` is `uploaded`; `null` when `status` is `duplicate`, because no new version was created.", + "title": "Content Version Id" + }, + "embedder_warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Set when the file is non-text but the source's embedder is text-only \u2014 indexing will rely on OCR / transcription and may produce a FAILED row if no text can be extracted.", + "title": "Embedder Warning" + }, + "filename": { + "description": "Original filename", + "title": "Filename", + "type": "string" + }, + "source_connection_content_version_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ID of the existing, already-indexed item this file duplicates, and what `GET /contents/{id}` takes. Set only when `status` is `duplicate`; `null` on a new upload, which has no such id until it finishes indexing.", + "title": "Source Connection Content Version Id" + }, + "status": { + "description": "`uploaded` for a new item, or `duplicate` when this exact file is already on the source.", + "title": "Status", + "type": "string" + } + }, + "required": [ + "content_version_id", + "source_connection_content_version_id", + "filename", + "status" + ], + "title": "FileUploadResponse", + "type": "object" + }, + "routers__api__sources__SourceListResponse": { + "description": "Response model for paginated source list", + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/SourceResponse" + }, + "title": "Data", + "type": "array" + }, + "pagination": { + "$ref": "#/components/schemas/PaginationResponse" + } + }, + "required": [ + "data", + "pagination" + ], + "title": "SourceListResponse", + "type": "object" + }, + "schemas__model_responses__PromptModelResponse": { + "description": "Response model for prompt model data", + "properties": { + "chat_capable": { + "default": true, + "description": "Whether this model can serve a chat request (`prompt_call`, `extract_data`). True for every plain text LLM, and for a dual-capability model that generates media AND holds a conversation; false for a dedicated generator (Imagen, Veo, a TTS voice), which bills per produced unit and has no chat interface. Authoritative: consumers must read this rather than inferring it from `generation_params` or `supported_output_media`, because the answer also depends on which inference interface serves the model \u2014 something no response field exposes.", + "title": "Chat Capable", + "type": "boolean" + }, + "default": { + "title": "Default", + "type": "boolean" + }, + "deprecated_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Deprecated At" + }, + "description": { + "title": "Description", + "type": "string" + }, + "effort_options": { + "anyOf": [ + { + "$ref": "#/components/schemas/EffortOptionsResponse" + }, + { + "type": "null" + } + ], + "description": "The reasoning-effort values a prompt_call or extract_data step may set as `effort` with this model. Null when the model takes none." + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "family": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Family" + }, + "family_generation": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Family Generation" + }, + "generation_credits_per_unit": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Per-unit credit cost for a dedicated media-generation model, in the unit named by ``generation_params.pricing_unit`` (per image / per second / per character / per output token). Multiply by the produced unit count (images, seconds, characters) for the run cost. None for models with no generation descriptor. This rate applies when the model is used in a generate_image/audio/video step; a model that also serves the chat path is billed per token there instead, using the input/output token rates on this same record. When `generation_params.price_varies_by` is set the model has one rate per value of that option and this is the **highest** of them \u2014 read `generation_credits_per_variant` for the real spread rather than presenting this as the price.", + "title": "Generation Credits Per Unit" + }, + "generation_credits_per_variant": { + "anyOf": [ + { + "additionalProperties": { + "type": "number" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Per-unit credit cost keyed by the value of the option named in `generation_params.price_varies_by` (e.g. `{'720p': 1330, '1080p': 1995}`). None for a model with a single rate, where `generation_credits_per_unit` already describes it exactly.", + "title": "Generation Credits Per Variant" + }, + "generation_params": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Media-generation descriptor (modality, pricing_unit, and modality-specific constraints). NULL for text LLMs; present for image/audio/video generation models. See schemas.generation_params. A present descriptor does NOT imply the model is generation-only: some models serve both paths (they generate media AND hold a chat conversation). Read `chat_capable` to tell whether a model with a descriptor can also be used as a chat model \u2014 do not branch on this field being non-null alone, and do not re-derive the answer from `supported_output_media`.", + "title": "Generation Params" + }, + "generation_unit_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Human suffix for the per-unit generation rate (e.g. ``/image``, ``/second``, ``/1k chars``, ``/1k tokens``) \u2014 single-sourced from the pricing unit so clients render cost without re-deriving the mapping. None for non-generation models. Char/token rates are shown per 1,000 (the ``/1k \u2026`` suffix), so scale ``generation_credits_per_unit`` accordingly for those units.", + "title": "Generation Unit Label" + }, + "id": { + "title": "Id", + "type": "string" + }, + "image_generation_tool_credits_per_image": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Per-image credit cost of using the built-in image_generation tool (it runs gpt-image-1). Set only for models that actually support the tool (tool-use capable); None otherwise.", + "title": "Image Generation Tool Credits Per Image" + }, + "input_1h_cache_write_credits_per_1000_tokens": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Credits per 1,000 input tokens written to a 1-hour prompt cache.", + "title": "Input 1H Cache Write Credits Per 1000 Tokens" + }, + "input_30m_cache_write_credits_per_1000_tokens": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Credits per 1,000 input tokens written to a 30-minute prompt cache.", + "title": "Input 30M Cache Write Credits Per 1000 Tokens" + }, + "input_5m_cache_write_credits_per_1000_tokens": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Credits per 1,000 input tokens written to a 5-minute prompt cache.", + "title": "Input 5M Cache Write Credits Per 1000 Tokens" + }, + "input_cache_hit_credits_per_1000_tokens": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "description": "Credits per 1,000 input tokens read from a prompt cache.", + "title": "Input Cache Hit Credits Per 1000 Tokens" + }, + "input_credits_per_1000_tokens": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Input Credits Per 1000 Tokens" + }, + "is_new": { + "default": false, + "title": "Is New", + "type": "boolean" + }, + "last_used": { + "default": false, + "title": "Last Used", + "type": "boolean" + }, + "max_context_tokens": { + "title": "Max Context Tokens", + "type": "integer" + }, + "max_conversation_length": { + "title": "Max Conversation Length", + "type": "integer" + }, + "max_output_tokens": { + "title": "Max Output Tokens", + "type": "integer" + }, + "model_id": { + "title": "Model Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "output_credits_per_1000_tokens": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Output Credits Per 1000 Tokens" + }, + "payload_schema": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Model-specific JSON schema for advanced prompt_call json_template payloads.", + "title": "Payload Schema" + }, + "payload_schema_source_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Source URL used to derive payload_schema guidance for this model.", + "title": "Payload Schema Source Url" + }, + "per_modality_rates": { + "items": { + "$ref": "#/components/schemas/ModalityRateResponse" + }, + "title": "Per Modality Rates", + "type": "array" + }, + "provider": { + "title": "Provider", + "type": "string" + }, + "released_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Released At" + }, + "schema_documentation_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Model documentation URL with request/response payload details.", + "title": "Schema Documentation Url" + }, + "schema_notes": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Human-readable notes about request payload compatibility.", + "title": "Schema Notes" + }, + "successor_model_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Successor Model Id" + }, + "sunset_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sunset At" + }, + "supported_input_media": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Supported Input Media" + }, + "supported_languages": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Supported Languages" + }, + "supported_output_media": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Supported Output Media" + }, + "supports_openai_arguments": { + "default": false, + "title": "Supports Openai Arguments", + "type": "boolean" + }, + "supports_streaming": { + "default": false, + "title": "Supports Streaming", + "type": "boolean" + }, + "supports_structured_output": { + "default": true, + "title": "Supports Structured Output", + "type": "boolean" + }, + "supports_thinking": { + "default": false, + "title": "Supports Thinking", + "type": "boolean" + }, + "supports_tool_use": { + "default": true, + "title": "Supports Tool Use", + "type": "boolean" + }, + "tools_disabled": { + "items": { + "$ref": "#/components/schemas/PromptToolResponse" + }, + "title": "Tools Disabled", + "type": "array" + }, + "tools_enabled": { + "items": { + "$ref": "#/components/schemas/PromptToolResponse" + }, + "title": "Tools Enabled", + "type": "array" + }, + "training_cutoff_at": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Training Cutoff At" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "variants": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/VariantCategoryResponse" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Variants" + } + }, + "required": [ + "id", + "model_id", + "name", + "description", + "enabled", + "default", + "provider", + "max_context_tokens", + "max_output_tokens", + "max_conversation_length" + ], + "title": "PromptModelResponse", + "type": "object" + }, + "schemas__model_responses__ProviderGroupResponse": { + "description": "Response model for provider group with models", + "properties": { + "models": { + "items": { + "$ref": "#/components/schemas/schemas__model_responses__PromptModelResponse" + }, + "title": "Models", + "type": "array" + }, + "provider": { + "title": "Provider", + "type": "string" + } + }, + "required": [ + "provider", + "models" + ], + "title": "ProviderGroupResponse", + "type": "object" + }, + "schemas__v1__agent_evaluations__NonManualEvaluationModeStatResponse": { + "description": "Per-mode rollup for evaluation activity.", + "properties": { + "failed": { + "title": "Failed", + "type": "integer" + }, + "failure_rate": { + "title": "Failure Rate", + "type": "number" + }, + "flagged": { + "title": "Flagged", + "type": "integer" + }, + "mode": { + "title": "Mode", + "type": "string" + }, + "pass_rate": { + "title": "Pass Rate", + "type": "number" + }, + "passed": { + "title": "Passed", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "mode", + "total", + "passed", + "failed", + "flagged", + "pass_rate", + "failure_rate" + ], + "title": "NonManualEvaluationModeStatResponse", + "type": "object" + }, + "schemas__v1__agent_evaluations__NonManualEvaluationSummaryResponse": { + "description": "Account-level summary for evaluations.", + "properties": { + "by_mode": { + "items": { + "$ref": "#/components/schemas/schemas__v1__agent_evaluations__NonManualEvaluationModeStatResponse" + }, + "title": "By Mode", + "type": "array" + }, + "failed": { + "title": "Failed", + "type": "integer" + }, + "failure_rate": { + "title": "Failure Rate", + "type": "number" + }, + "flagged": { + "title": "Flagged", + "type": "integer" + }, + "pass_rate": { + "title": "Pass Rate", + "type": "number" + }, + "passed": { + "title": "Passed", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "total", + "passed", + "failed", + "flagged", + "pass_rate", + "failure_rate", + "by_mode" + ], + "title": "NonManualEvaluationSummaryResponse", + "type": "object" + } + }, + "securitySchemes": { + "ApiKeyAuth": { + "description": "API key issued from the Seclai dashboard.", + "in": "header", + "name": "X-API-Key", + "type": "apiKey" + }, + "BearerAuth": { + "bearerFormat": "JWT", + "description": "OAuth2 access token from AWS Cognito.", + "scheme": "bearer", + "type": "http" + } + } + }, + "info": { + "description": "Main API service for Seclai", + "title": "Seclai API", + "version": "local" + }, + "openapi": "3.1.0", + "paths": { + "/agents": { + "get": { + "description": "List agents for the account with pagination.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", + "operationId": "list_agents_api_agents_get", + "parameters": [ + { + "description": "Page number", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "description": "Page number", + "minimum": 1, + "title": "Page", + "type": "integer" + } + }, + { + "description": "Items per page", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "description": "Items per page", + "maximum": 100, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__agents__AgentListResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "List agents", + "tags": [ + "agents" + ] + }, + "post": { + "description": "Create a new agent.\n\nTrigger types:\n- `dynamic_input`: triggered via API with user-provided input\n- `template_input`: triggered via API with a predefined template\n- `schedule`: triggered on a schedule\n- `new_content`: triggered when new content arrives\n- `email_received`: a virtual email inbox; runs when mail arrives at the agent's address. Configure the alias/allowlist with `PUT /agents/{agent_id}/triggers/{trigger_id}/email-config`.\n\nTemplates: `blank`, `retrieval_example`, `simple_qa`, `summarizer`, `json_extractor`, `content_change_notifier`, `scheduled_report`, `webhook_pipeline`\n\nImporting an existing agent:\n- Pass `agent_definition` with the JSON shape produced by `GET /agents/{id}/export`. The full extras suite (alert_configs, evaluation_criteria, governance_policies, schedules, solutions) is applied; items that don't resolve in this account are reported in the response's `import_warnings` array.\n- Use `POST /agents/preview-import` first to surface `unresolved_refs` (workflow refs to KBs, memory banks, source connections, sub-agents that don't exist here). Then pass `entity_remap: {source_uuid: target_uuid}` on this call to substitute them before save.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Agent is created in the caller's account.", + "operationId": "create_agent_api_agents_post", + "parameters": [ + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__agents__CreateAgentRequest" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentSummaryResponse" + } + } + }, + "description": "Successful Response" + }, + "402": { + "description": "Plan limit exceeded \u2014 the account has reached the maximum number of agents allowed by its subscription plan." + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentDefinitionImportErrorResponse" + } + } + }, + "description": "The supplied `agent_definition` payload failed validation. The body lists each error with a 1-indexed line/column pointing into the canonical pretty-printed echo of the payload (also returned in `source`)." + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Create an agent", + "tags": [ + "agents" + ] + } + }, + "/agents/agent-email-optouts": { + "get": { + "description": "List recipients who have opted out of this account's agent emails (filter to one agent via `agent_id`; account-wide opt-outs always apply). Paginated via `limit`/`offset`; returns the page plus the `total` count.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", + "operationId": "list_agent_email_optouts_api_api_agents_agent_email_optouts_get", + "parameters": [ + { + "description": "Filter to one agent (account-wide opt-outs still apply)", + "in": "query", + "name": "agent_id", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to one agent (account-wide opt-outs still apply)", + "title": "Agent Id" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 50, + "maximum": 200, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, + { + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "minimum": 0, + "title": "Offset", + "type": "integer" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentEmailOptOutListResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "List agent-email opt-outs", + "tags": [ + "agents" + ] + } + }, + "/agents/agent-email-optouts/{optout_id}": { + "delete": { + "description": "Revoke an opt-out (opt the recipient back in to agent emails).\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; the opt-out must belong to the key's account.", + "operationId": "remove_agent_email_optout_api_api_agents_agent_email_optouts__optout_id__delete", + "parameters": [ + { + "in": "path", + "name": "optout_id", + "required": true, + "schema": { + "title": "Optout Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Revoke an agent-email opt-out", + "tags": [ + "agents" + ] + } + }, + "/agents/blocked-email-senders": { + "get": { + "description": "List the account's blocked inbound email senders (newest first, paginated via `limit`/`offset`) plus the governance `auto_block_mode`.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", + "operationId": "list_blocked_email_senders_api_api_agents_blocked_email_senders_get", + "parameters": [ + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 50, + "maximum": 200, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, + { + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "minimum": 0, + "title": "Offset", + "type": "integer" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockedEmailSenderListResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "List blocked inbound email senders + the auto-block mode", + "tags": [ + "agents" + ] + }, + "post": { + "description": "Add a sender address or a whole domain to the account blocklist (idempotent; `match_type` is `address` (default) or `domain`).\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", + "operationId": "block_email_sender_api_api_agents_blocked_email_senders_post", + "parameters": [ + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockEmailSenderRequest" + } + } + }, + "required": true + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockedEmailSenderResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Block an inbound email sender or domain", + "tags": [ + "agents" + ] + } + }, + "/agents/blocked-email-senders/mode": { + "put": { + "description": "Set whether a governance BLOCK on an authenticated inbound email sender auto-adds them to the blocklist (`disabled`, `input`, or `input_and_output`); returns the updated list.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", + "operationId": "set_auto_block_mode_api_api_agents_blocked_email_senders_mode_put", + "parameters": [ + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetAutoBlockModeRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BlockedEmailSenderListResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Set the governance auto-block mode", + "tags": [ + "agents" + ] + } + }, + "/agents/blocked-email-senders/{blocked_id}": { + "delete": { + "description": "Remove a blocked sender by id.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; the blocked sender must belong to the key's account.", + "operationId": "unblock_email_sender_api_api_agents_blocked_email_senders__blocked_id__delete", + "parameters": [ + { + "in": "path", + "name": "blocked_id", + "required": true, + "schema": { + "title": "Blocked Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Unblock an inbound email sender", + "tags": [ + "agents" + ] + } + }, + "/agents/evaluation-criteria/{criteria_id}": { + "delete": { + "description": "Delete an evaluation criteria and all associated evaluation results.\n\nThis action is permanent and cannot be undone. All historical result\nrecords tied to the criteria are removed as well.", + "operationId": "delete_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__delete", + "parameters": [ + { + "in": "path", + "name": "criteria_id", + "required": true, + "schema": { + "title": "Criteria Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Delete Evaluation Criteria", + "tags": [ + "agent-evaluations" + ] + }, + "get": { + "description": "Get a single evaluation criteria by ID.\n\nReturns the full criteria configuration including type-specific fields,\ncurrent enabled state, and a summary of recent evaluation results.", + "operationId": "get_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__get", + "parameters": [ + { + "in": "path", + "name": "criteria_id", + "required": true, + "schema": { + "title": "Criteria Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EvaluationCriteriaResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Get Evaluation Criteria", + "tags": [ + "agent-evaluations" + ] + }, + "patch": { + "description": "Update an evaluation criteria.\n\nAccepts a partial update \u2013 only the fields included in the request body\nare modified. Use this to toggle enabled/disabled, change the\nevaluation prompt, adjust retries, or rename the criteria.", + "operationId": "update_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__patch", + "parameters": [ + { + "in": "path", + "name": "criteria_id", + "required": true, + "schema": { + "title": "Criteria Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateEvaluationCriteriaRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EvaluationCriteriaResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Update Evaluation Criteria", + "tags": [ + "agent-evaluations" + ] + } + }, + "/agents/evaluation-criteria/{criteria_id}/compatible-runs": { + "get": { + "description": "List agent runs that have a completed step matching the criteria's target step.\n\nReturns runs whose step output can be used for testing or replaying the\nevaluation criteria. Results are ordered newest-first and paginated.", + "operationId": "list_compatible_runs_api_agents_evaluation_criteria__criteria_id__compatible_runs_get", + "parameters": [ + { + "in": "path", + "name": "criteria_id", + "required": true, + "schema": { + "title": "Criteria Id", + "type": "string" + } + }, + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "title": "Page", + "type": "integer" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "maximum": 100, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, + { + "in": "query", + "name": "started_after", + "required": false, + "schema": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Started After" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CompatibleRunListResponse" + } + } + }, + "description": "Successful Response" }, - "total": { - "title": "Total", - "type": "integer" + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "required": [ - "total", - "passed", - "failed", - "flagged", - "pass_rate", - "failure_rate", - "by_mode" - ], - "title": "NonManualEvaluationSummaryResponse", - "type": "object" + "summary": "List Compatible Runs", + "tags": [ + "agent-evaluations" + ] } }, - "securitySchemes": { - "ApiKeyAuth": { - "description": "API key issued from the Seclai dashboard.", - "in": "header", - "name": "X-API-Key", - "type": "apiKey" - }, - "BearerAuth": { - "bearerFormat": "JWT", - "description": "OAuth2 access token from AWS Cognito.", - "scheme": "bearer", - "type": "http" - } - } - }, - "info": { - "description": "Main API service for Seclai", - "title": "Seclai API", - "version": "local" - }, - "openapi": "3.1.0", - "paths": { - "/agents": { + "/agents/evaluation-criteria/{criteria_id}/results": { "get": { - "description": "List agents for the account with pagination.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", - "operationId": "list_agents_api_agents_get", + "description": "List evaluation results for a criteria with optional filtering.\n\nSupports filtering by status (pending, passed, failed, skipped, error),\nflagged-only mode, and an optional time range. Results are paginated\nwith configurable page size.", + "operationId": "list_evaluation_results_api_agents_evaluation_criteria__criteria_id__results_get", "parameters": [ { - "description": "Page number", + "in": "path", + "name": "criteria_id", + "required": true, + "schema": { + "title": "Criteria Id", + "type": "string" + } + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status" + } + }, + { + "in": "query", + "name": "flagged_only", + "required": false, + "schema": { + "default": false, + "title": "Flagged Only", + "type": "boolean" + } + }, + { + "in": "query", + "name": "time_from", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Time From" + } + }, + { + "in": "query", + "name": "time_to", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Time To" + } + }, + { "in": "query", "name": "page", "required": false, "schema": { "default": 1, - "description": "Page number", "minimum": 1, "title": "Page", "type": "integer" } }, { - "description": "Items per page", "in": "query", "name": "limit", "required": false, "schema": { "default": 20, - "description": "Items per page", "maximum": 100, "minimum": 1, "title": "Limit", @@ -11336,7 +13681,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__agents__AgentListResponse" + "$ref": "#/components/schemas/EvaluationResultListResponse" } } }, @@ -11351,17 +13696,44 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List agents", + "summary": "List Evaluation Results", "tags": [ - "agents" + "agent-evaluations" ] }, "post": { - "description": "Create a new agent.\n\nTrigger types:\n- `dynamic_input`: triggered via API with user-provided input\n- `template_input`: triggered via API with a predefined template\n- `schedule`: triggered on a schedule\n- `new_content`: triggered when new content arrives\n- `email_received`: a virtual email inbox; runs when mail arrives at the agent's address. Configure the alias/allowlist with `PUT /agents/{agent_id}/triggers/{trigger_id}/email-config`.\n\nTemplates: `blank`, `retrieval_example`, `simple_qa`, `summarizer`, `json_extractor`, `content_change_notifier`, `scheduled_report`, `webhook_pipeline`\n\nImporting an existing agent:\n- Pass `agent_definition` with the JSON shape produced by `GET /agents/{id}/export`. The full extras suite (alert_configs, evaluation_criteria, governance_policies, schedules, solutions) is applied; items that don't resolve in this account are reported in the response's `import_warnings` array.\n- Use `POST /agents/preview-import` first to surface `unresolved_refs` (workflow refs to KBs, memory banks, source connections, sub-agents that don't exist here). Then pass `entity_remap: {source_uuid: target_uuid}` on this call to substitute them before save.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Agent is created in the caller's account.", - "operationId": "create_agent_api_agents_post", + "description": "Record an evaluation result for a criteria.\n\nUse this endpoint to push results from external test harnesses, CI/CD\npipelines, or custom evaluation logic. Each result is linked to an\nagent run and optionally a specific step run.", + "operationId": "create_evaluation_result_api_agents_evaluation_criteria__criteria_id__results_post", "parameters": [ + { + "in": "path", + "name": "criteria_id", + "required": true, + "schema": { + "title": "Criteria Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -11373,7 +13745,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__agents__CreateAgentRequest" + "$ref": "#/components/schemas/CreateEvaluationResultRequest" } } }, @@ -11384,39 +13756,121 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponse" + "$ref": "#/components/schemas/EvaluationResultResponse" } } }, "description": "Successful Response" }, - "402": { - "description": "Plan limit exceeded \u2014 the account has reached the maximum number of agents allowed by its subscription plan." + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Create Evaluation Result", + "tags": [ + "agent-evaluations" + ] + } + }, + "/agents/evaluation-criteria/{criteria_id}/summary": { + "get": { + "description": "Get an aggregated summary of evaluation results for a criteria.\n\nReturns total, passed, failed, error, and flagged counts alongside the\naverage score, giving a quick overview of how the criteria is performing.", + "operationId": "get_evaluation_summary_api_agents_evaluation_criteria__criteria_id__summary_get", + "parameters": [ + { + "in": "path", + "name": "criteria_id", + "required": true, + "schema": { + "title": "Criteria Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EvaluationResultSummaryResponse" + } + } + }, + "description": "Successful Response" }, "422": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentDefinitionImportErrorResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } }, - "description": "The supplied `agent_definition` payload failed validation. The body lists each error with a 1-indexed line/column pointing into the canonical pretty-printed echo of the payload (also returned in `source`)." + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Create an agent", + "summary": "Get Evaluation Summary", "tags": [ - "agents" + "agent-evaluations" ] } }, - "/agents/agent-email-optouts": { + "/agents/evaluation-results/non-manual-summary": { "get": { - "description": "List recipients who have opted out of this account's agent emails (filter to one agent via `agent_id`; account-wide opt-outs always apply). Paginated via `limit`/`offset`; returns the page plus the `total` count.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", - "operationId": "list_agent_email_optouts_api_api_agents_agent_email_optouts_get", + "description": "Get an evaluation summary for API key clients.\n\nReturns aggregated pass/fail/flagged counts and pass rates for each evaluation mode (eval_and_retry, sample_and_flag).\n\nThe ``agent_id`` scoping parameter is part of the ``2026-07-27`` changeset\n(opt in via the ``Seclai-Version`` header). Clients on the legacy baseline\nalways receive the account-wide rollup; ``agent_id`` is ignored for them so\nthe endpoint's behavior is frozen. With ``2026-07-27`` or later, the summary\nis scoped to ``agent_id`` when supplied (and returns 404 if it doesn't exist).", + "operationId": "get_non_manual_evaluation_summary_api_agents_evaluation_results_non_manual_summary_get", "parameters": [ { - "description": "Filter to one agent (account-wide opt-outs still apply)", + "description": "Scope the summary to a single agent. Omit for account-wide.", "in": "query", "name": "agent_id", "required": false, @@ -11429,31 +13883,52 @@ "type": "null" } ], - "description": "Filter to one agent (account-wide opt-outs still apply)", + "description": "Scope the summary to a single agent. Omit for account-wide.", "title": "Agent Id" } }, { "in": "query", - "name": "limit", + "name": "days", "required": false, "schema": { - "default": 50, - "maximum": 200, + "default": 30, + "maximum": 730, "minimum": 1, - "title": "Limit", + "title": "Days", "type": "integer" } }, { "in": "query", - "name": "offset", + "name": "start_date", "required": false, "schema": { - "default": 0, - "minimum": 0, - "title": "Offset", - "type": "integer" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Start Date" + } + }, + { + "in": "query", + "name": "end_date", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "End Date" } }, { @@ -11468,7 +13943,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentEmailOptOutListResponse" + "$ref": "#/components/schemas/schemas__v1__agent_evaluations__NonManualEvaluationSummaryResponse" } } }, @@ -11483,81 +13958,64 @@ } }, "description": "Validation Error" - } - }, - "summary": "List agent-email opt-outs", - "tags": [ - "agents" - ] - } - }, - "/agents/agent-email-optouts/{optout_id}": { - "delete": { - "description": "Revoke an opt-out (opt the recipient back in to agent emails).\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; the opt-out must belong to the key's account.", - "operationId": "remove_agent_email_optout_api_api_agents_agent_email_optouts__optout_id__delete", - "parameters": [ - { - "in": "path", - "name": "optout_id", - "required": true, - "schema": { - "title": "Optout Id", - "type": "string" - } - }, - { - "$ref": "#/components/parameters/X-Account-Id" - }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "responses": { - "204": { - "description": "Successful Response" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Revoke an agent-email opt-out", + "summary": "Get Non Manual Evaluation Summary", "tags": [ - "agents" + "agent-evaluations" ] } }, - "/agents/blocked-email-senders": { + "/agents/inbound-email-rejections": { "get": { - "description": "List the account's blocked inbound email senders (newest first, paginated via `limit`/`offset`) plus the governance `auto_block_mode`.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", - "operationId": "list_blocked_email_senders_api_api_agents_blocked_email_senders_get", + "description": "List recent inbound emails that were quietly discarded before running an agent (unauthorized sender, unknown alias, spam/virus, flood-shed) for this account's agents.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", + "operationId": "list_inbound_email_rejections_api_api_agents_inbound_email_rejections_get", "parameters": [ { + "description": "Filter to a single agent's rejections", "in": "query", - "name": "limit", + "name": "agent_id", "required": false, "schema": { - "default": 50, - "maximum": 200, - "minimum": 1, - "title": "Limit", - "type": "integer" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to a single agent's rejections", + "title": "Agent Id" } }, { "in": "query", - "name": "offset", + "name": "limit", "required": false, "schema": { - "default": 0, - "minimum": 0, - "title": "Offset", + "default": 50, + "maximum": 200, + "minimum": 1, + "title": "Limit", "type": "integer" } }, @@ -11573,7 +14031,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BlockedEmailSenderListResponse" + "items": { + "$ref": "#/components/schemas/InboundEmailRejectionResponse" + }, + "title": "Response List Inbound Email Rejections Api Api Agents Inbound Email Rejections Get", + "type": "array" } } }, @@ -11588,66 +14050,36 @@ } }, "description": "Validation Error" - } - }, - "summary": "List blocked inbound email senders + the auto-block mode", - "tags": [ - "agents" - ] - }, - "post": { - "description": "Add a sender address or a whole domain to the account blocklist (idempotent; `match_type` is `address` (default) or `domain`).\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", - "operationId": "block_email_sender_api_api_agents_blocked_email_senders_post", - "parameters": [ - { - "$ref": "#/components/parameters/X-Account-Id" - }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BlockEmailSenderRequest" - } - } }, - "required": true - }, - "responses": { - "201": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BlockedEmailSenderResponse" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Successful Response" - }, - "422": { - "content": { - "application/json": { + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "type": "integer" } } - }, - "description": "Validation Error" + } } }, - "summary": "Block an inbound email sender or domain", + "summary": "List discarded inbound emails", "tags": [ "agents" ] } }, - "/agents/blocked-email-senders/mode": { - "put": { - "description": "Set whether a governance BLOCK on an authenticated inbound email sender auto-adds them to the blocklist (`disabled`, `input`, or `input_and_output`); returns the updated list.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", - "operationId": "set_auto_block_mode_api_api_agents_blocked_email_senders_mode_put", + "/agents/inbound-email-status": { + "get": { + "description": "Whether the account-wide overload circuit breaker has currently paused new inbound email (all inbound turned away until the queued backlog drains), plus the size of the QUEUED (over-quota parked) run backlog.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", + "operationId": "get_inbound_email_status_api_api_agents_inbound_email_status_get", "parameters": [ { "$ref": "#/components/parameters/X-Account-Id" @@ -11656,58 +14088,47 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetAutoBlockModeRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/BlockedEmailSenderListResponse" + "$ref": "#/components/schemas/InboundEmailStatusResponse" } } }, "description": "Successful Response" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Set the governance auto-block mode", + "summary": "Account inbound-email overload status", "tags": [ "agents" ] } }, - "/agents/blocked-email-senders/{blocked_id}": { - "delete": { - "description": "Remove a blocked sender by id.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; the blocked sender must belong to the key's account.", - "operationId": "unblock_email_sender_api_api_agents_blocked_email_senders__blocked_id__delete", + "/agents/inbound-email-status/cancel-queued": { + "post": { + "description": "Fail all of the account's QUEUED (over-quota parked) inbound-email runs at once. A queued run has consumed no quota, so this merely fails them. Returns the count cancelled.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", + "operationId": "cancel_queued_email_runs_api_api_agents_inbound_email_status_cancel_queued_post", "parameters": [ - { - "in": "path", - "name": "blocked_id", - "required": true, - "schema": { - "title": "Blocked Id", - "type": "string" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -11716,40 +14137,46 @@ } ], "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CancelQueuedRunsResponse" + } + } + }, "description": "Successful Response" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Unblock an inbound email sender", + "summary": "Cancel all queued inbound-email runs", "tags": [ "agents" ] } }, - "/agents/evaluation-criteria/{criteria_id}": { - "delete": { - "description": "Delete an evaluation criteria and all associated evaluation results.\n\nThis action is permanent and cannot be undone. All historical result\nrecords tied to the criteria are removed as well.", - "operationId": "delete_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__delete", - "parameters": [ - { - "in": "path", - "name": "criteria_id", - "required": true, - "schema": { - "title": "Criteria Id", - "type": "string" - } - }, + "/agents/inbound-email-status/resume": { + "post": { + "description": "Manually lift the account-wide inbound pause. If the queued backlog is still above the ceiling the breaker re-arms on the next evaluation \u2014 this is a one-shot override, not a permanent disable.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", + "operationId": "resume_inbound_email_api_api_agents_inbound_email_status_resume_post", + "parameters": [ { "$ref": "#/components/parameters/X-Account-Id" }, @@ -11758,38 +14185,46 @@ } ], "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResumeInboundResponse" + } + } + }, "description": "Successful Response" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Delete Evaluation Criteria", + "summary": "Manually resume paused inbound email", "tags": [ - "agent-evaluations" + "agents" ] - }, - "get": { - "description": "Get a single evaluation criteria by ID.\n\nReturns the full criteria configuration including type-specific fields,\ncurrent enabled state, and a summary of recent evaluation results.", - "operationId": "get_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__get", + } + }, + "/agents/preview-import": { + "post": { + "description": "Validate an `agent_definition` payload (the same shape produced by `GET /agents/{agent_id}/export`) without creating or modifying any agent. On success returns a summary the client can show before commit (counts of steps, schedules, alert configs, evaluation criteria, governance policies). On failure returns the same 422 body shape used by `POST /agents` and `PUT /agents/{id}` so callers can render line/column-anchored errors.\n\nCoverage: everything decidable from the payload itself \u2014 schema, step ids, nesting depth, text lengths, attachment references, prompt-tool declarations, step-graph cycles, racing step references, and `for_each` aggregation. Rules that depend on account state (email recipients, memory-bank types, cloud-drive connections, the agent's own trigger) can only run at save time, so `POST /agents` may still reject a payload this endpoint accepts.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. No DB writes.", + "operationId": "preview_import_agent_api_agents_preview_import_post", "parameters": [ - { - "in": "path", - "name": "criteria_id", - "required": true, - "schema": { - "title": "Criteria Id", - "type": "string" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -11797,12 +14232,22 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__agents__AgentImportPreviewRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationCriteriaResponse" + "$ref": "#/components/schemas/routers__api__agents__AgentImportPreviewResponse" } } }, @@ -11812,31 +14257,42 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/AgentDefinitionImportErrorResponse" } } }, - "description": "Validation Error" + "description": "The supplied `agent_definition` payload failed validation. The body lists each error with a 1-indexed line/column pointing into the canonical pretty-printed echo of the payload (also returned in `source`)." + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get Evaluation Criteria", + "summary": "Preview an agent_definition import", "tags": [ - "agent-evaluations" + "agents" ] - }, - "patch": { - "description": "Update an evaluation criteria.\n\nAccepts a partial update \u2013 only the fields included in the request body\nare modified. Use this to toggle enabled/disabled, change the\nevaluation prompt, adjust retries, or rename the criteria.", - "operationId": "update_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__patch", + } + }, + "/agents/runs/search": { + "post": { + "description": "Search agent traces using semantic similarity.\n\nFinds step-run outputs that are most semantically similar to the query.\nResults include the matching text, agent/step metadata, and a similarity score.\n\nAgent traces are automatically indexed when runs complete. The first 7 days of storage are free; extended retention is billed.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Searches only within your account's traces.", + "operationId": "search_agent_runs_api_agents_runs_search_post", "parameters": [ - { - "in": "path", - "name": "criteria_id", - "required": true, - "schema": { - "title": "Criteria Id", - "type": "string" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -11848,7 +14304,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateEvaluationCriteriaRequest" + "$ref": "#/components/schemas/routers__api__agents__AgentTraceSearchRequest" } } }, @@ -11859,7 +14315,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationCriteriaResponse" + "$ref": "#/components/schemas/AgentTraceSearchResponse" } } }, @@ -11874,68 +14330,46 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Update Evaluation Criteria", + "summary": "Search agent traces", "tags": [ - "agent-evaluations" + "agents" ] } }, - "/agents/evaluation-criteria/{criteria_id}/compatible-runs": { - "get": { - "description": "List agent runs that have a completed step matching the criteria's target step.\n\nReturns runs whose step output can be used for testing or replaying the\nevaluation criteria. Results are ordered newest-first and paginated.", - "operationId": "list_compatible_runs_api_agents_evaluation_criteria__criteria_id__compatible_runs_get", + "/agents/runs/{run_id}": { + "delete": { + "description": "Cancel an in-flight (`processing`) or queued (`queued`) agent run.\n\nA `queued` run is an inbound-email run parked by the per-plan rate quota that has not yet been dispatched; it has consumed no quota.\n\nIf the run is already in a terminal state (`completed` or `failed`), cancellation will be rejected.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only cancel runs belonging to your account.", + "operationId": "delete_agent_run_api_agents_runs__run_id__delete", "parameters": [ { "in": "path", - "name": "criteria_id", + "name": "run_id", "required": true, "schema": { - "title": "Criteria Id", + "title": "Run Id", "type": "string" } }, - { - "in": "query", - "name": "page", - "required": false, - "schema": { - "default": 1, - "minimum": 1, - "title": "Page", - "type": "integer" - } - }, - { - "in": "query", - "name": "limit", - "required": false, - "schema": { - "default": 20, - "maximum": 100, - "minimum": 1, - "title": "Limit", - "type": "integer" - } - }, - { - "in": "query", - "name": "started_after", - "required": false, - "schema": { - "anyOf": [ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Started After" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -11948,7 +14382,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CompatibleRunListResponse" + "$ref": "#/components/schemas/AgentRunResponse" } } }, @@ -11963,107 +14397,54 @@ } }, "description": "Validation Error" - } - }, - "summary": "List Compatible Runs", - "tags": [ - "agent-evaluations" - ] - } - }, - "/agents/evaluation-criteria/{criteria_id}/results": { - "get": { - "description": "List evaluation results for a criteria with optional filtering.\n\nSupports filtering by status (pending, passed, failed, skipped, error),\nflagged-only mode, and an optional time range. Results are paginated\nwith configurable page size.", - "operationId": "list_evaluation_results_api_agents_evaluation_criteria__criteria_id__results_get", - "parameters": [ - { - "in": "path", - "name": "criteria_id", - "required": true, - "schema": { - "title": "Criteria Id", - "type": "string" - } - }, - { - "in": "query", - "name": "status", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Status" - } - }, - { - "in": "query", - "name": "flagged_only", - "required": false, - "schema": { - "default": false, - "title": "Flagged Only", - "type": "boolean" - } }, - { - "in": "query", - "name": "time_from", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" } - ], - "title": "Time From" - } - }, - { - "in": "query", - "name": "time_to", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" } - ], - "title": "Time To" + } } - }, + } + }, + "summary": "Cancel an agent run", + "tags": [ + "agents" + ] + }, + "get": { + "description": "Fetch the latest snapshot for an agent run created by `POST /agents/{agent_id}/runs` or `POST /agents/{agent_id}/runs/stream`.\n\nThe response includes `status`, `error_count`, and `output` once the run completes. Use `include_step_outputs=true` to include per-step outputs, timing, durations, and credits.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only access runs belonging to your account.", + "operationId": "get_agent_run_api_agents_runs__run_id__get", + "parameters": [ { - "in": "query", - "name": "page", - "required": false, + "in": "path", + "name": "run_id", + "required": true, "schema": { - "default": 1, - "minimum": 1, - "title": "Page", - "type": "integer" + "title": "Run Id", + "type": "string" } }, { + "description": "If true, include per-step outputs with timing, durations, and credits.", "in": "query", - "name": "limit", + "name": "include_step_outputs", "required": false, "schema": { - "default": 20, - "maximum": 100, - "minimum": 1, - "title": "Limit", - "type": "integer" + "default": false, + "description": "If true, include per-step outputs with timing, durations, and credits.", + "title": "Include Step Outputs", + "type": "boolean" } }, { @@ -12078,7 +14459,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationResultListResponse" + "$ref": "#/components/schemas/AgentRunResponse" } } }, @@ -12093,23 +14474,43 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List Evaluation Results", + "summary": "Get an agent run", "tags": [ - "agent-evaluations" + "agents" ] - }, - "post": { - "description": "Record an evaluation result for a criteria.\n\nUse this endpoint to push results from external test harnesses, CI/CD\npipelines, or custom evaluation logic. Each result is linked to an\nagent run and optionally a specific step run.", - "operationId": "create_evaluation_result_api_agents_evaluation_criteria__criteria_id__results_post", + } + }, + "/agents/{agent_id}": { + "delete": { + "description": "Soft-delete an agent. The agent will no longer appear in listings or be accessible via the API.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only delete agents belonging to your account.", + "operationId": "delete_agent_api_agents__agent_id__delete", "parameters": [ { "in": "path", - "name": "criteria_id", + "name": "agent_id", "required": true, "schema": { - "title": "Criteria Id", + "title": "Agent Id", "type": "string" } }, @@ -12120,55 +14521,54 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateEvaluationResultRequest" - } - } - }, - "required": true - }, "responses": { - "201": { + "204": { + "description": "Successful Response" + }, + "422": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationResultResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } }, - "description": "Successful Response" + "description": "Validation Error" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Create Evaluation Result", + "summary": "Delete an agent", "tags": [ - "agent-evaluations" + "agents" ] - } - }, - "/agents/evaluation-criteria/{criteria_id}/summary": { + }, "get": { - "description": "Get an aggregated summary of evaluation results for a criteria.\n\nReturns total, passed, failed, error, and flagged counts alongside the\naverage score, giving a quick overview of how the criteria is performing.", - "operationId": "get_evaluation_summary_api_agents_evaluation_criteria__criteria_id__summary_get", + "description": "Fetch an agent's metadata (name, description, trigger type, timestamps).\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only access agents belonging to your account.", + "operationId": "get_agent_metadata_api_agents__agent_id__get", "parameters": [ { "in": "path", - "name": "criteria_id", + "name": "agent_id", "required": true, "schema": { - "title": "Criteria Id", + "title": "Agent Id", "type": "string" } }, @@ -12184,7 +14584,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationResultSummaryResponse" + "$ref": "#/components/schemas/AgentSummaryResponse" } } }, @@ -12199,79 +14599,42 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get Evaluation Summary", + "summary": "Get an agent", "tags": [ - "agent-evaluations" + "agents" ] - } - }, - "/agents/evaluation-results/non-manual-summary": { - "get": { - "description": "Get an evaluation summary for API key clients.\n\nReturns aggregated pass/fail/flagged counts and pass rates for each evaluation mode (eval_and_retry, sample_and_flag).\n\nThe ``agent_id`` scoping parameter is part of the ``2026-07-27`` changeset\n(opt in via the ``Seclai-Version`` header). Clients on the legacy baseline\nalways receive the account-wide rollup; ``agent_id`` is ignored for them so\nthe endpoint's behavior is frozen. With ``2026-07-27`` or later, the summary\nis scoped to ``agent_id`` when supplied (and returns 404 if it doesn't exist).", - "operationId": "get_non_manual_evaluation_summary_api_agents_evaluation_results_non_manual_summary_get", + }, + "put": { + "description": "Update an agent's name, description, evaluation settings, and model lifecycle settings.\n\nEvaluation settings: `evaluation_mode` ('output_expectation', 'eval_and_retry', 'sample_and_flag'), `default_evaluation_tier` ('fast', 'balanced', 'thorough'), `max_retries`, `retry_on_failure`, `sampling_config`.\n\nModel lifecycle settings: `prompt_model_auto_upgrade_strategy` ('none', 'early_adopter', 'middle_of_road', 'cautious_adopter'), `prompt_model_auto_rollback_enabled`, `prompt_model_auto_rollback_triggers` (list of 'agent_eval_fail', 'governance_flag', 'governance_block', 'agent_run_failed').\n\nReplacing the workflow from an export:\n- Pass `agent_definition` with the JSON shape produced by `GET /agents/{id}/export`. Update only touches the workflow + agent metadata \u2014 alert_configs, evaluation_criteria, governance_policies, schedules, and solution links from the imported file are NOT applied (use the dedicated endpoints for those, or `POST /agents` to import as a new agent).\n- `entity_remap: {source_uuid: target_uuid}` substitutes workflow entity refs before save (same shape as `POST /agents`).\n\nAt least one field must be provided.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only update agents belonging to your account.", + "operationId": "update_agent_api_agents__agent_id__put", "parameters": [ { - "description": "Scope the summary to a single agent. Omit for account-wide.", - "in": "query", + "in": "path", "name": "agent_id", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Scope the summary to a single agent. Omit for account-wide.", - "title": "Agent Id" - } - }, - { - "in": "query", - "name": "days", - "required": false, - "schema": { - "default": 30, - "maximum": 730, - "minimum": 1, - "title": "Days", - "type": "integer" - } - }, - { - "in": "query", - "name": "start_date", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Start Date" - } - }, - { - "in": "query", - "name": "end_date", - "required": false, + "required": true, "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "End Date" + "title": "Agent Id", + "type": "string" } }, { @@ -12281,12 +14644,22 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__agents__UpdateAgentRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/schemas__v1__agent_evaluations__NonManualEvaluationSummaryResponse" + "$ref": "#/components/schemas/AgentSummaryResponse" } } }, @@ -12296,28 +14669,66 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/AgentDefinitionImportErrorResponse" } } }, - "description": "Validation Error" + "description": "The supplied `agent_definition` payload failed validation. The body lists each error with a 1-indexed line/column pointing into the canonical pretty-printed echo of the payload (also returned in `source`)." + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get Non Manual Evaluation Summary", + "summary": "Update agent metadata", "tags": [ - "agent-evaluations" + "agents" ] } }, - "/agents/inbound-email-rejections": { + "/agents/{agent_id}/ai-assistant/conversations": { "get": { - "description": "List recent inbound emails that were quietly discarded before running an agent (unauthorized sender, unknown alias, spam/virus, flood-shed) for this account's agents.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", - "operationId": "list_inbound_email_rejections_api_api_agents_inbound_email_rejections_get", + "description": "Fetch the AI assistant conversation history for a specific step of an agent.\n\nReturns past conversation turns (user inputs, AI responses, accept/decline status) ordered oldest first. Use `step_type` to filter by step type, and optionally `step_id` to narrow to a specific step instance.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Only agents belonging to your account can be queried.", + "operationId": "get_ai_conversation_history_api_agents__agent_id__ai_assistant_conversations_get", "parameters": [ { - "description": "Filter to a single agent's rejections", - "in": "query", + "in": "path", "name": "agent_id", + "required": true, + "schema": { + "title": "Agent Id", + "type": "string" + } + }, + { + "description": "Step type to look up.", + "in": "query", + "name": "step_type", + "required": true, + "schema": { + "description": "Step type to look up.", + "title": "Step Type", + "type": "string" + } + }, + { + "description": "Step ID to filter by.", + "in": "query", + "name": "step_id", "required": false, "schema": { "anyOf": [ @@ -12328,22 +14739,37 @@ "type": "null" } ], - "description": "Filter to a single agent's rejections", - "title": "Agent Id" + "description": "Step ID to filter by.", + "title": "Step Id" } }, { + "description": "Max turns to return.", "in": "query", "name": "limit", "required": false, "schema": { - "default": 50, - "maximum": 200, + "default": 10, + "description": "Max turns to return.", + "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" } }, + { + "description": "Number of recent turns to skip.", + "in": "query", + "name": "offset", + "required": false, + "schema": { + "default": 0, + "description": "Number of recent turns to skip.", + "minimum": 0, + "title": "Offset", + "type": "integer" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -12356,11 +14782,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/InboundEmailRejectionResponse" - }, - "title": "Response List Inbound Email Rejections Api Api Agents Inbound Email Rejections Get", - "type": "array" + "$ref": "#/components/schemas/AiConversationHistoryResponse" } } }, @@ -12375,49 +14797,46 @@ } }, "description": "Validation Error" - } - }, - "summary": "List discarded inbound emails", - "tags": [ - "agents" - ] - } - }, - "/agents/inbound-email-status": { - "get": { - "description": "Whether the account-wide overload circuit breaker has currently paused new inbound email (all inbound turned away until the queued backlog drains), plus the size of the QUEUED (over-quota parked) run backlog.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; always scoped to the key's account.", - "operationId": "get_inbound_email_status_api_api_agents_inbound_email_status_get", - "parameters": [ - { - "$ref": "#/components/parameters/X-Account-Id" }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "responses": { - "200": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InboundEmailStatusResponse" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Successful Response" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Account inbound-email overload status", + "summary": "Get AI conversation history", "tags": [ "agents" ] } }, - "/agents/inbound-email-status/cancel-queued": { + "/agents/{agent_id}/ai-assistant/generate-steps": { "post": { - "description": "Fail all of the account's QUEUED (over-quota parked) inbound-email runs at once. A queued run consumed no quota or credits at queue time, so this merely fails them. Returns the count cancelled.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", - "operationId": "cancel_queued_email_runs_api_api_agents_inbound_email_status_cancel_queued_post", + "description": "Use the AI assistant to generate a full agent step workflow from a natural language description.\n\nProvide a description of what the agent should do, along with optional context (current steps, trigger type). The AI produces a complete set of agent steps.\nUse mode 'generate_full' for new workflows or 'modify_workflow' to refine existing ones.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Only agents belonging to your account can be used.", + "operationId": "generate_agent_steps_api_agents__agent_id__ai_assistant_generate_steps_post", "parameters": [ + { + "in": "path", + "name": "agent_id", + "required": true, + "schema": { + "title": "Agent Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -12425,29 +14844,76 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenerateAgentStepsRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CancelQueuedRunsResponse" + "$ref": "#/components/schemas/GenerateAgentStepsResponse" } } }, "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Cancel all queued inbound-email runs", + "summary": "Generate agent workflow", "tags": [ "agents" ] } }, - "/agents/inbound-email-status/resume": { + "/agents/{agent_id}/ai-assistant/step-config": { "post": { - "description": "Manually lift the account-wide inbound pause. If the queued backlog is still above the ceiling the breaker re-arms on the next evaluation \u2014 this is a one-shot override, not a permanent disable.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account.", - "operationId": "resume_inbound_email_api_api_agents_inbound_email_status_resume_post", + "description": "Use the AI assistant to generate or refine a single step's configuration.\n\nProvide the step type, a natural language instruction, and optionally the current configuration. The AI will produce a proposed configuration along with an explanation. The suggestion is stored as a conversation turn that can be accepted or declined separately via the mark endpoint.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Only agents belonging to your account can be used.", + "operationId": "generate_step_config_api_agents__agent_id__ai_assistant_step_config_post", "parameters": [ + { + "in": "path", + "name": "agent_id", + "required": true, + "schema": { + "title": "Agent Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -12455,29 +14921,85 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GenerateStepConfigRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ResumeInboundResponse" + "$ref": "#/components/schemas/GenerateStepConfigResponse" } } }, "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Manually resume paused inbound email", + "summary": "Generate step configuration", "tags": [ "agents" ] } }, - "/agents/preview-import": { - "post": { - "description": "Validate an `agent_definition` payload (the same shape produced by `GET /agents/{agent_id}/export`) without creating or modifying any agent. On success returns a summary the client can show before commit (counts of steps, schedules, alert configs, evaluation criteria, governance policies). On failure returns the same 422 body shape used by `POST /agents` and `PUT /agents/{id}` so callers can render line/column-anchored errors.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. No DB writes.", - "operationId": "preview_import_agent_api_agents_preview_import_post", + "/agents/{agent_id}/ai-assistant/{conversation_id}": { + "patch": { + "description": "Accept or decline a proposed AI assistant configuration for a conversation turn.\n\nThis only updates the tracking status on the conversation record. To actually apply the proposed configuration, use the agent definition update endpoint separately.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The conversation must belong to one of your agents.", + "operationId": "mark_ai_suggestion_api_agents__agent_id__ai_assistant__conversation_id__patch", "parameters": [ + { + "in": "path", + "name": "agent_id", + "required": true, + "schema": { + "title": "Agent Id", + "type": "string" + } + }, + { + "in": "path", + "name": "conversation_id", + "required": true, + "schema": { + "title": "Conversation Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -12489,7 +15011,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__agents__AgentImportPreviewRequest" + "$ref": "#/components/schemas/MarkAiSuggestionRequest" } } }, @@ -12500,7 +15022,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__agents__AgentImportPreviewResponse" + "$ref": "#/components/schemas/OkResponse" } } }, @@ -12510,24 +15032,51 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentDefinitionImportErrorResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } }, - "description": "The supplied `agent_definition` payload failed validation. The body lists each error with a 1-indexed line/column pointing into the canonical pretty-printed echo of the payload (also returned in `source`)." + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Preview an agent_definition import", + "summary": "Accept or decline suggestion", "tags": [ "agents" ] } }, - "/agents/runs/search": { - "post": { - "description": "Search agent traces using semantic similarity.\n\nFinds step-run outputs that are most semantically similar to the query.\nResults include the matching text, agent/step metadata, and a similarity score.\n\nAgent traces are automatically indexed when runs complete. The first 7 days of storage are free; extended retention is billed.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Searches only within your account's traces.", - "operationId": "search_agent_runs_api_agents_runs_search_post", + "/agents/{agent_id}/attachment-references": { + "get": { + "description": "Return the static attachment-reference contract for an agent \u2014 what files the agent's definition expects on a run.\n\nCall this BEFORE staging uploads so you know whether the agent accepts files at all (``requires_uploads``), and which specific filenames/indexes/patterns the templates reference. Mismatched batches are rejected at run time with HTTP 400.", + "operationId": "api_get_agent_attachment_references_api_agents__agent_id__attachment_references_get", "parameters": [ + { + "in": "path", + "name": "agent_id", + "required": true, + "schema": { + "title": "Agent Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -12535,22 +15084,12 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/routers__api__agents__AgentTraceSearchRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentTraceSearchResponse" + "$ref": "#/components/schemas/AgentAttachmentRefsApiResponse" } } }, @@ -12565,25 +15104,43 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Search agent traces", + "summary": "Get agent attachment-reference contract", "tags": [ "agents" ] } }, - "/agents/runs/{run_id}": { - "delete": { - "description": "Cancel an in-flight (`processing`) or queued (`queued`) agent run.\n\nA `queued` run is an inbound-email run parked by the per-plan rate quota that has not yet been dispatched; cancelling it consumes no quota or credits.\n\nIf the run is already in a terminal state (`completed` or `failed`), cancellation will be rejected.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only cancel runs belonging to your account.", - "operationId": "delete_agent_run_api_agents_runs__run_id__delete", + "/agents/{agent_id}/callers": { + "get": { + "description": "List the live agents that call this agent via a `call_agent` step. They must be disabled before this agent can be paused.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; the agent must belong to the key's account.", + "operationId": "get_agent_callers_api_api_agents__agent_id__callers_get", "parameters": [ { "in": "path", - "name": "run_id", + "name": "agent_id", "required": true, "schema": { - "title": "Run Id", + "title": "Agent Id", "type": "string" } }, @@ -12599,7 +15156,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentRunResponse" + "items": { + "$ref": "#/components/schemas/AgentCallerApiResponse" + }, + "title": "Response Get Agent Callers Api Api Agents Agent Id Callers Get", + "type": "array" } } }, @@ -12614,38 +15175,46 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Cancel an agent run", + "summary": "List agents that call this agent", "tags": [ "agents" ] - }, + } + }, + "/agents/{agent_id}/definition": { "get": { - "description": "Fetch the latest snapshot for an agent run created by `POST /agents/{agent_id}/runs` or `POST /agents/{agent_id}/runs/stream`.\n\nThe response includes `status`, `error_count`, and `output` once the run completes. Use `include_step_outputs=true` to include per-step outputs, timing, durations, and credits.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only access runs belonging to your account.", - "operationId": "get_agent_run_api_agents_runs__run_id__get", + "description": "Fetch the current agent definition from the main branch.\n\nThe response includes `change_id` which must be provided when updating the definition (optimistic locking).\n\nThe definition contains the agent's step workflow. Available step types:\n- `prompt_call`: Call an LLM with a prompt template\n- `retrieval`: Search a knowledge base\n- `regex_replace`: Reshape text via ordered regex find/replace rules\n- `gate`: Evaluate conditions, stop or continue child execution\n- `retry`: Re-execute from a target ancestor step (for quality-control loops; pair with a `gate` step for conditional retrying. Fields: `target_step_id` (ancestor step ID), `max_retries` (1\u201310))\n- `evaluate_step`: Score a selected previous step output and emit JSON with `score`, `passed`, and `pass_threshold` (fields: `target_step_id`, `evaluation_prompt`, `pass_threshold`, optional `evaluation_tier`, optional `expectation_config`)\n- `extract_data`: Progressively read and analyze large input\n- `extract_content`: Extract structured data (JSON, HTML, XML)\n- `add_chat_turn` / `load_chat_history`: Record a turn or load running history from a conversation memory bank\n- `add_memory` / `search_memory` / `load_memory`: Write, semantic-search, or load entries on a general memory bank\n- `send_email`: Send email with step output\n- `webhook_call`: POST data to an external URL\n- `write_aws_s3_object`: Write output to S3\n- `call_agent`: Invoke another agent\n- `write_metadata`: Write a value to content metadata (for filtering/gates; content-triggered agents only. Fields: `metadata_key`, `content`)\n- `write_content_attachment`: Write a file-backed attachment to content (optionally indexed for retrieval; content-triggered agents only. Fields: `attachment_key`, `content`, `content_type`, `indexed`)\n- `load_content_attachment`: Load a previously written attachment (content-triggered agents only. Fields: `attachment_key`)\n- `load_content`: Load the full text body of a source document (typically used with content-triggered agents; can also load by explicit `content_version_id`. Fields: `content_version_id` optional)\n- `streaming_result`: Stream LLM tokens in real-time via SSE (must be a direct child of `prompt_call`; requires `dynamic_input` or `template_input` trigger; `priority: true` enables real-time streaming). To stream **and** return a schema-validated payload, add a sibling branch `extract_content` (`expected_format: \"json\"` + `json_schema`) \u2192 `display_result` under the same `prompt_call` \u2014 a `display_result` takes precedence over the stream regardless of which finishes first, so its validated output becomes the run's result while the tokens act as a progress channel\n- `display_result`: Show output to the user\n- `join`: Merge parallel branches\n- `merge`: Combine multiple inputs into a single templated output\n- `text`: Static text literal\n- `for_each`: Iterate a body over a list of items (body lives in `body[]`)\n- `if_else`: Conditional dispatch. Evaluates `conditions` (same shape as `gate`) and runs `then_steps` on match, otherwise the optional `else_steps`. The chosen branch's output flows to the if_else step's own `child_steps` (post-branch continuation chain). **`display_result` and `streaming_result` are not allowed inside `then_steps` / `else_steps`** \u2014 end each branch with a content-producing step (e.g. `text`, `prompt_call`) and place the single `display_result` in `child_steps`.\n- `switch`: Single-discriminator dispatch. Renders `discriminator` (default `{{input}}`) and routes to the first matching `cases[]` entry (equality by default; pass a list in `match` for `$in` semantics) or to `else_steps` when nothing matches. The chosen case's output flows to the switch step's own `child_steps`. **`display_result` and `streaming_result` are not allowed inside `cases[].steps` or `else_steps`** \u2014 end each case with a content-producing step and place the single `display_result` in `child_steps`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only access agents belonging to your account.", + "operationId": "get_agent_definition_api_agents__agent_id__definition_get", "parameters": [ { "in": "path", - "name": "run_id", + "name": "agent_id", "required": true, "schema": { - "title": "Run Id", + "title": "Agent Id", "type": "string" } }, - { - "description": "If true, include per-step outputs with timing, durations, and credits.", - "in": "query", - "name": "include_step_outputs", - "required": false, - "schema": { - "default": false, - "description": "If true, include per-step outputs with timing, durations, and credits.", - "title": "Include Step Outputs", - "type": "boolean" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -12658,7 +15227,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentRunResponse" + "$ref": "#/components/schemas/AgentDefinitionResponse" } } }, @@ -12673,18 +15242,34 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get an agent run", + "summary": "Get agent definition", "tags": [ "agents" ] - } - }, - "/agents/{agent_id}": { - "delete": { - "description": "Soft-delete an agent. The agent will no longer appear in listings or be accessible via the API.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only delete agents belonging to your account.", - "operationId": "delete_agent_api_agents__agent_id__delete", + }, + "put": { + "description": "Update the agent's definition on the main branch.\n\nUses **optimistic locking**: provide `expected_change_id` from the last `GET /agents/{agent_id}/definition`. Returns `409 Conflict` if the definition was modified since your last read.\n\nThe definition contains the agent's step workflow. Step types include `prompt_call`, `retrieval`, `regex_replace`, `gate`, `retry`, `evaluate_step`, `extract_data`, `extract_content`, `add_chat_turn`, `load_chat_history`, `add_memory`, `search_memory`, `load_memory`, `streaming_result`, `send_email`, `webhook_call`, `write_aws_s3_object`, `call_agent`, `write_metadata`, `write_content_attachment`, `load_content_attachment`, `load_content`, `display_result`, `join`, `merge`, `text`, `for_each`, `if_else`, and `switch`. Non-composite step types (`display_result`, `join`, `retry`, `streaming_result`) cannot contain child steps.\n\n**Retry steps** re-execute from a target ancestor step for quality-control loops. Configure with `target_step_id` (ancestor step ID) and `max_retries` (1\u201310). Best practice: place a `gate` step before the retry to make retries conditional.\n\n**if_else** runs `then_steps` when its `conditions` (same shape as `gate`) match, otherwise its optional `else_steps`. Either branch's output flows to the if_else step's own `child_steps` (the post-branch continuation chain).\n\n**switch** dispatches on a `discriminator` template (default `{{input}}`) to the first matching case (equality by default; pass a list in `match` for `$in` semantics) or to `else_steps` when no case matches. Cases own their own `steps` subtrees; the chosen branch's output flows to the switch step's own `child_steps`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only update agents belonging to your account.", + "operationId": "update_agent_definition_api_agents__agent_id__definition_put", "parameters": [ { "in": "path", @@ -12702,8 +15287,25 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateAgentDefinitionRequest" + } + } + }, + "required": true + }, "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentDefinitionResponse" + } + } + }, "description": "Successful Response" }, "422": { @@ -12715,16 +15317,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Delete an agent", + "summary": "Update agent definition", "tags": [ "agents" ] - }, - "get": { - "description": "Fetch an agent's metadata (name, description, trigger type, timestamps).\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only access agents belonging to your account.", - "operationId": "get_agent_metadata_api_agents__agent_id__get", + } + }, + "/agents/{agent_id}/disable": { + "post": { + "description": "Disable an agent so it stops firing from every trigger path (API runs return 409, inbound email is turned away, scheduled/content triggers are skipped).\n\nReturns **409** with the blocking callers when other live agents still call this one via a `call_agent` step \u2014 disable those first.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token bound to a user (the acting user is recorded); the agent must belong to the key's account.", + "operationId": "disable_agent_api_api_agents__agent_id__disable_post", "parameters": [ { "in": "path", @@ -12762,16 +15384,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get an agent", + "summary": "Pause (disable) an agent", "tags": [ "agents" ] - }, - "put": { - "description": "Update an agent's name, description, evaluation settings, and model lifecycle settings.\n\nEvaluation settings: `evaluation_mode` ('output_expectation', 'eval_and_retry', 'sample_and_flag'), `default_evaluation_tier` ('fast', 'balanced', 'thorough'), `max_retries`, `retry_on_failure`, `sampling_config`.\n\nModel lifecycle settings: `prompt_model_auto_upgrade_strategy` ('none', 'early_adopter', 'middle_of_road', 'cautious_adopter'), `prompt_model_auto_rollback_enabled`, `prompt_model_auto_rollback_triggers` (list of 'agent_eval_fail', 'governance_flag', 'governance_block', 'agent_run_failed').\n\nReplacing the workflow from an export:\n- Pass `agent_definition` with the JSON shape produced by `GET /agents/{id}/export`. Update only touches the workflow + agent metadata \u2014 alert_configs, evaluation_criteria, governance_policies, schedules, and solution links from the imported file are NOT applied (use the dedicated endpoints for those, or `POST /agents` to import as a new agent).\n- `entity_remap: {source_uuid: target_uuid}` substitutes workflow entity refs before save (same shape as `POST /agents`).\n\nAt least one field must be provided.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only update agents belonging to your account.", - "operationId": "update_agent_api_agents__agent_id__put", + } + }, + "/agents/{agent_id}/enable": { + "post": { + "description": "Re-enable a paused agent (clears the disable state, whether it was paused manually or auto-paused by the inbound-email overload safeguard).\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token bound to a user (the acting user is recorded); the agent must belong to the key's account.", + "operationId": "enable_agent_api_api_agents__agent_id__enable_post", "parameters": [ { "in": "path", @@ -12789,16 +15431,6 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/routers__api__agents__UpdateAgentRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { @@ -12814,23 +15446,41 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentDefinitionImportErrorResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } }, - "description": "The supplied `agent_definition` payload failed validation. The body lists each error with a 1-indexed line/column pointing into the canonical pretty-printed echo of the payload (also returned in `source`)." + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Update agent metadata", + "summary": "Resume (enable) a paused agent", "tags": [ "agents" ] } }, - "/agents/{agent_id}/ai-assistant/conversations": { + "/agents/{agent_id}/evaluation-criteria": { "get": { - "description": "Fetch the AI assistant conversation history for a specific step of an agent.\n\nReturns past conversation turns (user inputs, AI responses, accept/decline status) ordered oldest first. Use `step_type` to filter by step type, and optionally `step_id` to narrow to a specific step instance.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Only agents belonging to your account can be queried.", - "operationId": "get_ai_conversation_history_api_agents__agent_id__ai_assistant_conversations_get", + "description": "List evaluation criteria configured for an agent.\n\nResponse shape is version-gated by the ``Seclai-Version`` header:\n\n- **Default / legacy** (no header, or a date before ``2026-07-27``): a bare\n JSON array of criteria (unpaginated \u2014 every criterion for the agent).\n- **``Seclai-Version: 2026-07-27`` or later**: the canonical paginated\n envelope ``{data, pagination: {page, limit, total, pages, has_next,\n has_prev}}``.\n\nEach criterion carries its type, configuration, and a summary of results\n(pass / fail counts). Criteria can be filtered client-side by type or\nenabled status.", + "operationId": "list_evaluation_criteria_api_agents__agent_id__evaluation_criteria_get", "parameters": [ { "in": "path", @@ -12842,61 +15492,28 @@ } }, { - "description": "Step type to look up.", - "in": "query", - "name": "step_type", - "required": true, - "schema": { - "description": "Step type to look up.", - "title": "Step Type", - "type": "string" - } - }, - { - "description": "Step ID to filter by.", "in": "query", - "name": "step_id", + "name": "page", "required": false, "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Step ID to filter by.", - "title": "Step Id" + "default": 1, + "minimum": 1, + "title": "Page", + "type": "integer" } }, { - "description": "Max turns to return.", "in": "query", "name": "limit", "required": false, "schema": { - "default": 10, - "description": "Max turns to return.", - "maximum": 50, + "default": 20, + "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, - { - "description": "Number of recent turns to skip.", - "in": "query", - "name": "offset", - "required": false, - "schema": { - "default": 0, - "description": "Number of recent turns to skip.", - "minimum": 0, - "title": "Offset", - "type": "integer" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -12909,7 +15526,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiConversationHistoryResponse" + "items": { + "$ref": "#/components/schemas/EvaluationCriteriaResponse" + }, + "title": "Response List Evaluation Criteria Api Agents Agent Id Evaluation Criteria Get", + "type": "array" } } }, @@ -12924,18 +15545,34 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get AI conversation history", + "summary": "List Evaluation Criteria", "tags": [ - "agents" + "agent-evaluations" ] - } - }, - "/agents/{agent_id}/ai-assistant/generate-steps": { + }, "post": { - "description": "Use the AI assistant to generate a full agent step workflow from a natural language description.\n\nProvide a description of what the agent should do, along with optional context (current steps, trigger type). The AI produces a complete set of agent steps.\nUse mode 'generate_full' for new workflows or 'modify_workflow' to refine existing ones.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Only agents belonging to your account can be used.", - "operationId": "generate_agent_steps_api_agents__agent_id__ai_assistant_generate_steps_post", + "description": "Create new step evaluation settings for an agent.\n\nThe evaluation mode, retry settings, and sample frequency are inherited\nfrom the agent and stored on the criteria row for historical reference.", + "operationId": "create_evaluation_criteria_api_agents__agent_id__evaluation_criteria_post", "parameters": [ { "in": "path", @@ -12957,18 +15594,18 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenerateAgentStepsRequest" + "$ref": "#/components/schemas/CreateEvaluationCriteriaRequest" } } }, "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenerateAgentStepsResponse" + "$ref": "#/components/schemas/EvaluationCriteriaResponse" } } }, @@ -12983,18 +15620,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Generate agent workflow", + "summary": "Create Evaluation Criteria", "tags": [ - "agents" + "agent-evaluations" ] } }, - "/agents/{agent_id}/ai-assistant/step-config": { + "/agents/{agent_id}/evaluation-criteria/test-draft": { "post": { - "description": "Use the AI assistant to generate or refine a single step's configuration.\n\nProvide the step type, a natural language instruction, and optionally the current configuration. The AI will produce a proposed configuration along with an explanation. The suggestion is stored as a conversation turn that can be accepted or declined separately via the mark endpoint.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Only agents belonging to your account can be used.", - "operationId": "generate_step_config_api_agents__agent_id__ai_assistant_step_config_post", + "description": "Run an ephemeral evaluation against provided step output without persisting results.\n\nUse this to interactively test evaluation prompts and expectation\nconfigurations while editing criteria. The evaluation is a billed LLM\ncall; only its result goes unrecorded.", + "operationId": "test_draft_evaluation_api_agents__agent_id__evaluation_criteria_test_draft_post", "parameters": [ { "in": "path", @@ -13016,7 +15671,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenerateStepConfigRequest" + "$ref": "#/components/schemas/TestDraftEvaluationRequest" } } }, @@ -13027,7 +15682,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenerateStepConfigResponse" + "$ref": "#/components/schemas/TestDraftEvaluationResponse" } } }, @@ -13042,18 +15697,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Generate step configuration", + "summary": "Test Draft Evaluation", "tags": [ - "agents" + "agent-evaluations" ] } }, - "/agents/{agent_id}/ai-assistant/{conversation_id}": { - "patch": { - "description": "Accept or decline a proposed AI assistant configuration for a conversation turn.\n\nThis only updates the tracking status on the conversation record. To actually apply the proposed configuration, use the agent definition update endpoint separately.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The conversation must belong to one of your agents.", - "operationId": "mark_ai_suggestion_api_agents__agent_id__ai_assistant__conversation_id__patch", + "/agents/{agent_id}/evaluation-results": { + "get": { + "description": "List evaluation results across all criteria configured on an agent.\n\nReturns a paginated list of evaluation results with optional filtering by status, criteria, and date range. Results include score, pass/fail status, and details.", + "operationId": "list_agent_evaluation_results_api_agents__agent_id__evaluation_results_get", "parameters": [ { "in": "path", @@ -13065,12 +15738,100 @@ } }, { - "in": "path", - "name": "conversation_id", - "required": true, + "in": "query", + "name": "status", + "required": false, "schema": { - "title": "Conversation Id", - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status" + } + }, + { + "in": "query", + "name": "step", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Step" + } + }, + { + "in": "query", + "name": "flagged_only", + "required": false, + "schema": { + "default": false, + "title": "Flagged Only", + "type": "boolean" + } + }, + { + "in": "query", + "name": "time_from", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Time From" + } + }, + { + "in": "query", + "name": "time_to", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Time To" + } + }, + { + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "title": "Page", + "type": "integer" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "maximum": 100, + "minimum": 1, + "title": "Limit", + "type": "integer" } }, { @@ -13080,22 +15841,12 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MarkAiSuggestionRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OkResponse" + "$ref": "#/components/schemas/EvaluationResultWithCriteriaListResponse" } } }, @@ -13110,26 +15861,131 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Accept or decline suggestion", + "summary": "List Agent Evaluation Results", "tags": [ - "agents" + "agent-evaluations" ] } }, - "/agents/{agent_id}/attachment-references": { + "/agents/{agent_id}/evaluation-runs": { "get": { - "description": "Return the static attachment-reference contract for an agent \u2014 what files the agent's definition expects on a run.\n\nCall this BEFORE staging uploads so you know whether the agent accepts files at all (``requires_uploads``), and which specific filenames/indexes/patterns the templates reference. Mismatched batches are rejected at run time with HTTP 400.", - "operationId": "api_get_agent_attachment_references_api_agents__agent_id__attachment_references_get", + "description": "List evaluation results grouped by agent run.\n\nReturns paginated per-run summaries with pass/fail counts and optional\nfiltering by evaluation outcome, step, or date range.", + "operationId": "list_evaluation_runs_api_agents__agent_id__evaluation_runs_get", "parameters": [ { - "in": "path", - "name": "agent_id", - "required": true, + "in": "path", + "name": "agent_id", + "required": true, + "schema": { + "title": "Agent Id", + "type": "string" + } + }, + { + "in": "query", + "name": "status", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status" + } + }, + { + "in": "query", + "name": "step", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Step" + } + }, + { + "in": "query", + "name": "time_from", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Time From" + } + }, + { + "in": "query", + "name": "time_to", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Time To" + } + }, + { + "in": "query", + "name": "page", + "required": false, "schema": { - "title": "Agent Id", - "type": "string" + "default": 1, + "minimum": 1, + "title": "Page", + "type": "integer" + } + }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "maximum": 100, + "minimum": 1, + "title": "Limit", + "type": "integer" } }, { @@ -13144,7 +16000,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentAttachmentRefsApiResponse" + "$ref": "#/components/schemas/EvaluationRunSummaryListResponse" } } }, @@ -13159,71 +16015,36 @@ } }, "description": "Validation Error" - } - }, - "summary": "Get agent attachment-reference contract", - "tags": [ - "agents" - ] - } - }, - "/agents/{agent_id}/callers": { - "get": { - "description": "List the live agents that call this agent via a `call_agent` step. They must be disabled before this agent can be paused.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; the agent must belong to the key's account.", - "operationId": "get_agent_callers_api_api_agents__agent_id__callers_get", - "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } - }, - { - "$ref": "#/components/parameters/X-Account-Id" }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "responses": { - "200": { + "503": { "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/AgentCallerApiResponse" - }, - "title": "Response Get Agent Callers Api Api Agents Agent Id Callers Get", - "type": "array" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Successful Response" - }, - "422": { - "content": { - "application/json": { + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "type": "integer" } } - }, - "description": "Validation Error" + } } }, - "summary": "List agents that call this agent", + "summary": "List Evaluation Runs", "tags": [ - "agents" + "agent-evaluations" ] } }, - "/agents/{agent_id}/definition": { + "/agents/{agent_id}/export": { "get": { - "description": "Fetch the current agent definition from the main branch.\n\nThe response includes `change_id` which must be provided when updating the definition (optimistic locking).\n\nThe definition contains the agent's step workflow. Available step types:\n- `prompt_call`: Call an LLM with a prompt template\n- `retrieval`: Search a knowledge base\n- `regex_replace`: Reshape text via ordered regex find/replace rules\n- `gate`: Evaluate conditions, stop or continue child execution\n- `retry`: Re-execute from a target ancestor step (for quality-control loops; pair with a `gate` step for conditional retrying. Fields: `target_step_id` (ancestor step ID), `max_retries` (1\u201310))\n- `evaluate_step`: Score a selected previous step output and emit JSON with `score`, `passed`, and `pass_threshold` (fields: `target_step_id`, `evaluation_prompt`, `pass_threshold`, optional `evaluation_tier`, optional `expectation_config`)\n- `extract_data`: Progressively read and analyze large input\n- `extract_content`: Extract structured data (JSON, HTML, XML)\n- `add_chat_turn` / `load_chat_history`: Record a turn or load running history from a conversation memory bank\n- `add_memory` / `search_memory` / `load_memory`: Write, semantic-search, or load entries on a general memory bank\n- `send_email`: Send email with step output\n- `webhook_call`: POST data to an external URL\n- `write_aws_s3_object`: Write output to S3\n- `call_agent`: Invoke another agent\n- `write_metadata`: Write a value to content metadata (for filtering/gates; content-triggered agents only. Fields: `metadata_key`, `content`)\n- `write_content_attachment`: Write a file-backed attachment to content (optionally indexed for retrieval; content-triggered agents only. Fields: `attachment_key`, `content`, `content_type`, `indexed`)\n- `load_content_attachment`: Load a previously written attachment (content-triggered agents only. Fields: `attachment_key`)\n- `load_content`: Load the full text body of a source document (typically used with content-triggered agents; can also load by explicit `content_version_id`. Fields: `content_version_id` optional)\n- `streaming_result`: Stream LLM tokens in real-time via SSE (must be a direct child of `prompt_call`; requires `dynamic_input` or `template_input` trigger; `priority: true` enables real-time streaming)\n- `display_result`: Show output to the user\n- `join`: Merge parallel branches\n- `merge`: Combine multiple inputs into a single templated output\n- `text`: Static text literal\n- `for_each`: Iterate a body over a list of items (body lives in `body[]`)\n- `if_else`: Conditional dispatch. Evaluates `conditions` (same shape as `gate`) and runs `then_steps` on match, otherwise the optional `else_steps`. The chosen branch's output flows to the if_else step's own `child_steps` (post-branch continuation chain). **`display_result` and `streaming_result` are not allowed inside `then_steps` / `else_steps`** \u2014 end each branch with a content-producing step (e.g. `text`, `prompt_call`) and place the single `display_result` in `child_steps`.\n- `switch`: Single-discriminator dispatch. Renders `discriminator` (default `{{input}}`) and routes to the first matching `cases[]` entry (equality by default; pass a list in `match` for `$in` semantics) or to `else_steps` when nothing matches. The chosen case's output flows to the switch step's own `child_steps`. **`display_result` and `streaming_result` are not allowed inside `cases[].steps` or `else_steps`** \u2014 end each case with a content-producing step and place the single `display_result` in `child_steps`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only access agents belonging to your account.", - "operationId": "get_agent_definition_api_agents__agent_id__definition_get", + "description": "Export an agent definition as a portable JSON snapshot.\n\nThe response contains the full definition, trigger configuration with schedules, alert configs, evaluation criteria, agent-scoped governance policies, and a resolved dependency manifest that maps every referenced external entity UUID to its human-readable name.\n\nResponse shape:\n- `export_version`: schema version (currently `\"5\"`)\n- `exported_at`: ISO-8601 timestamp\n- `agent`: name, description, schema_version, definition, timestamps\n- `trigger`: trigger type, input template, schedules\n- `alert_configs`: alert type, thresholds, recipients\n- `evaluation_criteria`: evaluation settings per step\n- `governance_policies`: agent-scoped governance policies\n- `dependencies`: knowledge_bases, memory_banks, source_connections, agents, users\n\nQuery params:\n- `download` (default true): when true, sets `Content-Disposition: attachment` so clients treat the response as a file download.\n\nAuth & scoping:\n- Requires `X-API-Key`. You can only export agents belonging to your account.", + "operationId": "export_agent_api_agents__agent_id__export_get", "parameters": [ { "in": "path", @@ -13234,6 +16055,18 @@ "type": "string" } }, + { + "description": "Return as file download", + "in": "query", + "name": "download", + "required": false, + "schema": { + "default": true, + "description": "Return as file download", + "title": "Download", + "type": "boolean" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -13246,7 +16079,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentDefinitionResponse" + "$ref": "#/components/schemas/AgentExportResponse" } } }, @@ -13261,75 +16094,36 @@ } }, "description": "Validation Error" - } - }, - "summary": "Get agent definition", - "tags": [ - "agents" - ] - }, - "put": { - "description": "Update the agent's definition on the main branch.\n\nUses **optimistic locking**: provide `expected_change_id` from the last `GET /agents/{agent_id}/definition`. Returns `409 Conflict` if the definition was modified since your last read.\n\nThe definition contains the agent's step workflow. Step types include `prompt_call`, `retrieval`, `regex_replace`, `gate`, `retry`, `evaluate_step`, `extract_data`, `extract_content`, `add_chat_turn`, `load_chat_history`, `add_memory`, `search_memory`, `load_memory`, `streaming_result`, `send_email`, `webhook_call`, `write_aws_s3_object`, `call_agent`, `write_metadata`, `write_content_attachment`, `load_content_attachment`, `load_content`, `display_result`, `join`, `merge`, `text`, `for_each`, `if_else`, and `switch`. Non-composite step types (`display_result`, `join`, `retry`, `streaming_result`) cannot contain child steps.\n\n**Retry steps** re-execute from a target ancestor step for quality-control loops. Configure with `target_step_id` (ancestor step ID) and `max_retries` (1\u201310). Best practice: place a `gate` step before the retry to make retries conditional.\n\n**if_else** runs `then_steps` when its `conditions` (same shape as `gate`) match, otherwise its optional `else_steps`. Either branch's output flows to the if_else step's own `child_steps` (the post-branch continuation chain).\n\n**switch** dispatches on a `discriminator` template (default `{{input}}`) to the first matching case (equality by default; pass a list in `match` for `$in` semantics) or to `else_steps` when no case matches. Cases own their own `steps` subtrees; the chosen branch's output flows to the switch step's own `child_steps`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only update agents belonging to your account.", - "operationId": "update_agent_definition_api_agents__agent_id__definition_put", - "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } }, - { - "$ref": "#/components/parameters/X-Account-Id" - }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAgentDefinitionRequest" - } - } - }, - "required": true - }, - "responses": { - "200": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentDefinitionResponse" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Successful Response" - }, - "422": { - "content": { - "application/json": { + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "type": "integer" } } - }, - "description": "Validation Error" + } } }, - "summary": "Update agent definition", + "summary": "Export agent definition", "tags": [ "agents" ] } }, - "/agents/{agent_id}/disable": { - "post": { - "description": "Disable an agent so it stops firing from every trigger path (API runs return 409, inbound email is turned away, scheduled/content triggers are skipped).\n\nReturns **409** with the blocking callers when other live agents still call this one via a `call_agent` step \u2014 disable those first.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token bound to a user (the acting user is recorded); the agent must belong to the key's account.", - "operationId": "disable_agent_api_api_agents__agent_id__disable_post", + "/agents/{agent_id}/input-uploads/{upload_id}": { + "get": { + "description": "Poll the processing status of a file upload created via `POST /agents/{agent_id}/upload-input`.\n\nPossible `status` values: `processing`, `ready`, `failed`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", + "operationId": "api_get_agent_input_upload_status_api_agents__agent_id__input_uploads__upload_id__get", "parameters": [ { "in": "path", @@ -13340,6 +16134,15 @@ "type": "string" } }, + { + "in": "path", + "name": "upload_id", + "required": true, + "schema": { + "title": "Upload Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -13352,7 +16155,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponse" + "$ref": "#/components/schemas/UploadAgentInputApiResponse" } } }, @@ -13367,67 +16170,36 @@ } }, "description": "Validation Error" - } - }, - "summary": "Pause (disable) an agent", - "tags": [ - "agents" - ] - } - }, - "/agents/{agent_id}/enable": { - "post": { - "description": "Re-enable a paused agent (clears the disable state, whether it was paused manually or auto-paused by the inbound-email overload safeguard).\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token bound to a user (the acting user is recorded); the agent must belong to the key's account.", - "operationId": "enable_agent_api_api_agents__agent_id__enable_post", - "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } }, - { - "$ref": "#/components/parameters/X-Account-Id" - }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "responses": { - "200": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentSummaryResponse" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Successful Response" - }, - "422": { - "content": { - "application/json": { + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "type": "integer" } } - }, - "description": "Validation Error" + } } }, - "summary": "Resume (enable) a paused agent", + "summary": "Get upload status", "tags": [ "agents" ] } }, - "/agents/{agent_id}/evaluation-criteria": { + "/agents/{agent_id}/runs": { "get": { - "description": "List evaluation criteria configured for an agent.\n\nResponse shape is version-gated by the ``Seclai-Version`` header:\n\n- **Default / legacy** (no header, or a date before ``2026-07-27``): a bare\n JSON array of criteria (unpaginated \u2014 every criterion for the agent).\n- **``Seclai-Version: 2026-07-27`` or later**: the canonical paginated\n envelope ``{data, pagination: {page, limit, total, pages, has_next,\n has_prev}}``.\n\nEach criterion carries its type, configuration, and a summary of results\n(pass / fail counts). Criteria can be filtered client-side by type or\nenabled status.", - "operationId": "list_evaluation_criteria_api_agents__agent_id__evaluation_criteria_get", + "description": "List runs for a specific agent (most recent first), with pagination.\n\nTypical use cases:\n- Build a traces UI for an agent.\n- Debug recent executions and inspect terminal statuses.\n\nNotes:\n- This endpoint returns a summary list. Fetch full details with `GET /agents/runs/{run_id}`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only list runs for agents in your account.", + "operationId": "list_agent_runs_api_agents__agent_id__runs_get", "parameters": [ { "in": "path", @@ -13439,28 +16211,50 @@ } }, { + "description": "Page number", "in": "query", "name": "page", "required": false, "schema": { "default": 1, + "description": "Page number", "minimum": 1, "title": "Page", "type": "integer" } }, { + "description": "Items per page", "in": "query", "name": "limit", "required": false, "schema": { - "default": 20, + "default": 50, + "description": "Items per page", "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } }, + { + "description": "Filter runs by status", + "in": "query", + "name": "status", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/PendingProcessingCompletedFailedStatus" + }, + { + "type": "null" + } + ], + "description": "Filter runs by status", + "title": "Status" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -13473,11 +16267,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/EvaluationCriteriaResponse" - }, - "title": "Response List Evaluation Criteria Api Agents Agent Id Evaluation Criteria Get", - "type": "array" + "$ref": "#/components/schemas/routers__api__agents__AgentRunListResponse" } } }, @@ -13492,16 +16282,34 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List Evaluation Criteria", + "summary": "List agent runs", "tags": [ - "agent-evaluations" + "agents" ] }, "post": { - "description": "Create new step evaluation settings for an agent.\n\nThe evaluation mode, retry settings, and sample frequency are inherited\nfrom the agent and stored on the criteria row for historical reference.", - "operationId": "create_evaluation_criteria_api_agents__agent_id__evaluation_criteria_post", + "description": "Start an agent run.\n\nAn *agent* is an automated workflow that can monitor content from your sources, process it with AI, and trigger actions. This endpoint creates a new run and returns a `run_id` you can poll to retrieve status and output.\n\nWhen to use:\n- Use this endpoint for request/response style integrations where polling is acceptable.\n- Use `POST /agents/{agent_id}/runs/stream` if you need real-time progress via SSE.\n\nKey fields:\n- `input`: text input for agents with a `dynamic_input` trigger.\n- `input_upload_id` / `input_upload_ids`: reference one or more files previously uploaded via `POST /agents/{agent_id}/upload-input`. Send them **with** `input` to pair prompt text with the files (the text leads, each file's extracted text follows); only the two upload fields are mutually exclusive with each other.\n- `priority`: set true for latency-sensitive, user-facing work. For agents with a `streaming_result` step, set `priority=true` to enable real-time token streaming; otherwise the run still proceeds, but without live token streaming.\n- `metadata`: a JSON object that becomes available to agent steps for string substitution.\n\nAfter starting:\n- Poll `GET /agents/runs/{run_id}` until `status` is `completed` or `failed`.\n- Use `include_step_outputs=true` to include per-step outputs, timing, and credits.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", + "operationId": "run_agent_api_agents__agent_id__runs_post", "parameters": [ { "in": "path", @@ -13523,23 +16331,33 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateEvaluationCriteriaRequest" + "$ref": "#/components/schemas/AgentRunRequest" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationCriteriaResponse" + "$ref": "#/components/schemas/AgentRunResponse" } } }, "description": "Successful Response" }, + "402": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InsufficientCreditsResponse" + } + } + }, + "description": "Insufficient credits \u2014 the account has exhausted its credits." + }, "422": { "content": { "application/json": { @@ -13549,18 +16367,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Create Evaluation Criteria", + "summary": "Run an agent", "tags": [ - "agent-evaluations" + "agents" ] } }, - "/agents/{agent_id}/evaluation-criteria/test-draft": { + "/agents/{agent_id}/runs/stream": { "post": { - "description": "Run an ephemeral evaluation against provided step output without persisting results.\n\nUse this to interactively test evaluation prompts and expectation\nconfigurations while editing criteria. No credits are consumed because\nthe result is not recorded.", - "operationId": "test_draft_evaluation_api_agents__agent_id__evaluation_criteria_test_draft_post", + "description": "Start a **priority** agent run and stream run events using Server-Sent Events (SSE).\n\nThis is the best option for interactive UIs where you want progress updates as the run executes.\n\nHow it works:\n- The first `init` event contains an `AgentRunResponse` snapshot, including the `run_id`.\n- Subsequent events are forwarded from the run event stream (status changes, step events, etc).\n- If the agent contains a `streaming_result` step, `stream_token` events deliver individual LLM tokens (with a `token` field) and a `stream_end` event signals completion.\n- The final `done` event contains the terminal snapshot (including `output` and `credits` when available).\n\nInput options (for `dynamic_input` triggers):\n- `input`: text input passed directly.\n- `input_upload_id` / `input_upload_ids`: reference one or more files uploaded via `POST /agents/{agent_id}/upload-input`. Combine either with `input` to send prompt text alongside the files; only the two upload fields are mutually exclusive with each other.\n\nClient guidance:\n- Keep the connection open and handle keepalive comments.\n- On `timeout` or `error`, the payload includes `run_id` so clients can resume by polling `GET /agents/runs/{run_id}`.\n- `stream_token` events carry the model's raw output. When the agent pairs `streaming_result` with a sibling `extract_content`/`display_result` branch, that branch's `display_result` takes precedence over the stream, so the `done` snapshot's `output` is the validated payload and the tokens are a progress channel \u2014 render tokens live, but read the result from `done`. Check `done.status` first: the streamed text is already the run's output when the stream ends, so a run that FAILED its validation step still carries that raw text in `output`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", + "operationId": "run_streaming_agent_api_agents__agent_id__runs_stream_post", "parameters": [ { "in": "path", @@ -13582,7 +16418,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestDraftEvaluationRequest" + "$ref": "#/components/schemas/AgentRunStreamRequest" } } }, @@ -13592,12 +16428,26 @@ "200": { "content": { "application/json": { + "schema": {} + }, + "text/event-stream": { + "example": ": keepalive\n\nevent: init\ndata: {\"run_id\":\"...\",\"status\":\"pending\",\"error_count\":0,\"credits\":0.0,\"priority\":true,\"input\":\"...\",\"output\":null,\"attempts\":[]}\n\nevent: done\ndata: {\"run_id\":\"...\",\"status\":\"completed\",\"error_count\":0,\"credits\":0.0,\"priority\":true,\"input\":\"...\",\"output\":\"...\",\"attempts\":[]}\n\n", "schema": { - "$ref": "#/components/schemas/TestDraftEvaluationResponse" + "type": "string" } } }, - "description": "Successful Response" + "description": "Streams agent run events via Server-Sent Events (SSE); run is always created as priority.\n\nSSE events:\n- `event: init` \u2014 `data` is an `AgentRunResponse` snapshot (includes `run_id`).\n- `event: done` \u2014 `data` is the final `AgentRunResponse` snapshot (includes `output`, `credits`, etc).\n- Other events (e.g. `status`, step events) are forwarded from the run event stream.\n- On `timeout` / `error`, the payload includes `run_id` so clients can fetch status via `GET /agents/runs/{run_id}`." + }, + "402": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InsufficientCreditsResponse" + } + } + }, + "description": "Insufficient credits \u2014 the account has exhausted its credits." }, "422": { "content": { @@ -13608,18 +16458,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Test Draft Evaluation", + "summary": "Run an agent (stream events)", "tags": [ - "agent-evaluations" + "agents" ] } }, - "/agents/{agent_id}/evaluation-results": { + "/agents/{agent_id}/runs/{run_id}/evaluation-results": { "get": { - "description": "List evaluation results across all criteria configured on an agent.\n\nReturns a paginated list of evaluation results with optional filtering by status, criteria, and date range. Results include score, pass/fail status, and details.", - "operationId": "list_agent_evaluation_results_api_agents__agent_id__evaluation_results_get", + "description": "List evaluation results recorded for a specific agent run.\n\nResponse shape is version-gated by the ``Seclai-Version`` header:\n\n- **Default / legacy** (no header, or a date before ``2026-07-27``): a bare\n JSON array of results (unpaginated \u2014 every result for the run).\n- **``Seclai-Version: 2026-07-27`` or later**: the canonical paginated\n envelope ``{data, pagination: {page, limit, total, pages, has_next,\n has_prev}}``.\n\nResults span all evaluation criteria for the given run, useful for getting a\ncomplete quality snapshot of a single execution.", + "operationId": "list_run_evaluation_results_api_agents__agent_id__runs__run_id__evaluation_results_get", "parameters": [ { "in": "path", @@ -13631,77 +16499,12 @@ } }, { - "in": "query", - "name": "status", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Status" - } - }, - { - "in": "query", - "name": "step", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Step" - } - }, - { - "in": "query", - "name": "flagged_only", - "required": false, - "schema": { - "default": false, - "title": "Flagged Only", - "type": "boolean" - } - }, - { - "in": "query", - "name": "time_from", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Time From" - } - }, - { - "in": "query", - "name": "time_to", - "required": false, + "in": "path", + "name": "run_id", + "required": true, "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Time To" + "title": "Run Id", + "type": "string" } }, { @@ -13739,7 +16542,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationResultWithCriteriaListResponse" + "items": { + "$ref": "#/components/schemas/EvaluationResultWithCriteriaResponse" + }, + "title": "Response List Run Evaluation Results Api Agents Agent Id Runs Run Id Evaluation Results Get", + "type": "array" } } }, @@ -13754,113 +16561,53 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List Agent Evaluation Results", + "summary": "List Run Evaluation Results", "tags": [ "agent-evaluations" ] } }, - "/agents/{agent_id}/evaluation-runs": { - "get": { - "description": "List evaluation results grouped by agent run.\n\nReturns paginated per-run summaries with pass/fail counts and optional\nfiltering by evaluation outcome, step, or date range.", - "operationId": "list_evaluation_runs_api_agents__agent_id__evaluation_runs_get", - "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } - }, - { - "in": "query", - "name": "status", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Status" - } - }, - { - "in": "query", - "name": "step", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Step" - } - }, - { - "in": "query", - "name": "time_from", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Time From" - } - }, - { - "in": "query", - "name": "time_to", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Time To" - } - }, + "/agents/{agent_id}/triggers/{trigger_id}/email-config": { + "put": { + "description": "Set the custom alias, sender allowlist, and inbound-handling flags (`ignore_auto_generated`, `require_sender_auth`, `queue_on_quota`) on an agent's EMAIL_RECEIVED trigger, and return its computed email address(es). Omitted fields are left unchanged.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; the trigger must belong to an agent in the key's account.", + "operationId": "set_email_trigger_config_api_api_agents__agent_id__triggers__trigger_id__email_config_put", + "parameters": [ { - "in": "query", - "name": "page", - "required": false, + "in": "path", + "name": "agent_id", + "required": true, "schema": { - "default": 1, - "minimum": 1, - "title": "Page", - "type": "integer" + "title": "Agent Id", + "type": "string" } }, { - "in": "query", - "name": "limit", - "required": false, + "in": "path", + "name": "trigger_id", + "required": true, "schema": { - "default": 20, - "maximum": 100, - "minimum": 1, - "title": "Limit", - "type": "integer" + "title": "Trigger Id", + "type": "string" } }, { @@ -13870,12 +16617,22 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__agents__SetEmailTriggerConfigRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EvaluationRunSummaryListResponse" + "$ref": "#/components/schemas/EmailTriggerConfigResponse" } } }, @@ -13890,18 +16647,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List Evaluation Runs", + "summary": "Configure an EMAIL_RECEIVED trigger", "tags": [ - "agent-evaluations" + "agents" ] } }, - "/agents/{agent_id}/export": { - "get": { - "description": "Export an agent definition as a portable JSON snapshot.\n\nThe response contains the full definition, trigger configuration with schedules, alert configs, evaluation criteria, agent-scoped governance policies, and a resolved dependency manifest that maps every referenced external entity UUID to its human-readable name.\n\nResponse shape:\n- `export_version`: schema version (currently `\"2\"`)\n- `exported_at`: ISO-8601 timestamp\n- `agent`: name, description, schema_version, definition, timestamps\n- `trigger`: trigger type, input template, schedules\n- `alert_configs`: alert type, thresholds, recipients\n- `evaluation_criteria`: evaluation settings per step\n- `governance_policies`: agent-scoped governance policies\n- `dependencies`: knowledge_bases, memory_banks, source_connections, agents, users\n\nQuery params:\n- `download` (default true): when true, sets `Content-Disposition: attachment` so clients treat the response as a file download.\n\nAuth & scoping:\n- Requires `X-API-Key`. You can only export agents belonging to your account.", - "operationId": "export_agent_api_agents__agent_id__export_get", + "/agents/{agent_id}/upload-input": { + "post": { + "description": "Upload a file to use as input for a `dynamic_input` agent run.\n\nSupports the same file types as content source uploads: text, PDF, DOCX, audio, video, images, etc. Text and document files are processed synchronously; audio/video are submitted for asynchronous transcription.\n\n**Size limit:** 200 MB per file.\n\n**Supported extensions:** txt, html, md, csv, xml, json, pdf, msg, docx, doc, pptx, ppt, xlsx, xls, zip, epub, png, jpg, gif, bmp, tiff, webp, mp3, wav, m4a, flac, ogg, mp4, mov, avi.\n\nAfter uploading, poll `GET /agents/{agent_id}/input-uploads/{upload_id}` until `status` is `ready`, then pass `input_upload_id` to `POST /agents/{agent_id}/runs`.\n\n**Multi-modal routing:** non-text uploads (image, audio, video, PDF) are surfaced natively to multi-modal-capable prompt steps; text-only models fall back to the OCR / transcript text counterpart. Audio originals are preserved past transcription so audio-capable models (Gemini 2.5/3, GPT-5 audio) read them directly; the agent-input-binary janitor sweeps originals once they pass your account's agent-trace retention (the agent-traces source's retention period; free default 7 days).\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", + "operationId": "api_upload_agent_input_api_agents__agent_id__upload_input_post", "parameters": [ { "in": "path", @@ -13913,17 +16688,63 @@ } }, { - "description": "Return as file download", - "in": "query", - "name": "download", - "required": false, - "schema": { - "default": true, - "description": "Return as file download", - "title": "Download", - "type": "boolean" - } + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "202": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadAgentInputApiResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Upload file input", + "tags": [ + "agents" + ] + } + }, + "/ai-assistant/feedback": { + "post": { + "description": "Submit thumbs-up/down feedback on any AI assistant interaction. Negative feedback with a comment is analyzed for concerning issues.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_feedback_api_ai_assistant_feedback_post", + "parameters": [ { "$ref": "#/components/parameters/X-Account-Id" }, @@ -13931,12 +16752,22 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__ai_assistant__AiAssistantFeedbackRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentExportResponse" + "$ref": "#/components/schemas/AiAssistantFeedbackResponse" } } }, @@ -13951,37 +16782,105 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Export agent definition", + "summary": "Submit AI assistant feedback", "tags": [ - "agents" + "ai-assistant" ] } }, - "/agents/{agent_id}/input-uploads/{upload_id}": { - "get": { - "description": "Poll the processing status of a file upload created via `POST /agents/{agent_id}/upload-input`.\n\nPossible `status` values: `processing`, `ready`, `failed`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", - "operationId": "api_get_agent_input_upload_status_api_agents__agent_id__input_uploads__upload_id__get", + "/ai-assistant/knowledge-base": { + "post": { + "description": "Generate a knowledge base creation/modification plan without requiring an existing solution. May also propose prerequisite source creation actions.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_knowledge_base_api_ai_assistant_knowledge_base_post", "parameters": [ { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } + "$ref": "#/components/parameters/X-Account-Id" }, { - "in": "path", - "name": "upload_id", - "required": true, - "schema": { - "title": "Upload Id", - "type": "string" + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__solutions__AiAssistantGenerateRequest" + } } }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AiAssistantGenerateResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Generate a knowledge base plan (standalone)", + "tags": [ + "ai-assistant" + ] + } + }, + "/ai-assistant/memory-bank": { + "post": { + "description": "Generate a memory bank configuration suggestion via the AI assistant. The AI proposes name, type, mode, compaction prompt, and retention settings.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_memory_bank_api_ai_assistant_memory_bank_post", + "parameters": [ { "$ref": "#/components/parameters/X-Account-Id" }, @@ -13989,12 +16888,22 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankAiAssistantRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadAgentInputApiResponse" + "$ref": "#/components/schemas/MemoryBankAiAssistantResponse" } } }, @@ -14007,73 +16916,64 @@ "$ref": "#/components/schemas/HTTPValidationError" } } - }, - "description": "Validation Error" + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get upload status", + "summary": "Generate a memory bank configuration (standalone)", "tags": [ - "agents" + "ai-assistant" ] } }, - "/agents/{agent_id}/runs": { + "/ai-assistant/memory-bank/last-conversation": { "get": { - "description": "List runs for a specific agent (most recent first), with pagination.\n\nTypical use cases:\n- Build a traces UI for an agent.\n- Debug recent executions and inspect terminal statuses.\n\nNotes:\n- This endpoint returns a summary list. Fetch full details with `GET /agents/runs/{run_id}`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only list runs for agents in your account.", - "operationId": "list_agent_runs_api_agents__agent_id__runs_get", + "description": "Fetch the most recent memory bank AI assistant conversation turns for the authenticated user. Returns turns in oldest-first order with a total count for pagination via limit/offset query parameters.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_memory_bank_history_api_ai_assistant_memory_bank_last_conversation_get", "parameters": [ { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "required": false, - "schema": { - "default": 1, - "description": "Page number", - "minimum": 1, - "title": "Page", - "type": "integer" - } - }, - { - "description": "Items per page", + "description": "Max turns.", "in": "query", "name": "limit", "required": false, "schema": { - "default": 50, - "description": "Items per page", - "maximum": 100, + "default": 5, + "description": "Max turns.", + "maximum": 50, "minimum": 1, "title": "Limit", "type": "integer" } }, { - "description": "Filter runs by status", + "description": "Skip count.", "in": "query", - "name": "status", + "name": "offset", "required": false, "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/PendingProcessingCompletedFailedStatus" - }, - { - "type": "null" - } - ], - "description": "Filter runs by status", - "title": "Status" + "default": 0, + "description": "Skip count.", + "minimum": 0, + "title": "Offset", + "type": "integer" } }, { @@ -14088,7 +16988,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__agents__AgentRunListResponse" + "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankLastConversationResponse" } } }, @@ -14103,23 +17003,44 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List agent runs", + "summary": "Fetch memory bank AI conversation history", "tags": [ - "agents" + "ai-assistant" ] - }, - "post": { - "description": "Start an agent run.\n\nAn *agent* is an automated workflow that can monitor content from your sources, process it with AI, and trigger actions. This endpoint creates a new run and returns a `run_id` you can poll to retrieve status and output.\n\nWhen to use:\n- Use this endpoint for request/response style integrations where polling is acceptable.\n- Use `POST /agents/{agent_id}/runs/stream` if you need real-time progress via SSE.\n\nKey fields:\n- `input`: text input for agents with a `dynamic_input` trigger.\n- `input_upload_id`: alternatively, reference a file previously uploaded via `POST /agents/{agent_id}/upload-input` (mutually exclusive with `input`).\n- `priority`: set true for latency-sensitive, user-facing work. For agents with a `streaming_result` step, set `priority=true` to enable real-time token streaming; otherwise the run still proceeds, but without live token streaming.\n- `metadata`: a JSON object that becomes available to agent steps for string substitution.\n\nAfter starting:\n- Poll `GET /agents/runs/{run_id}` until `status` is `completed` or `failed`.\n- Use `include_step_outputs=true` to include per-step outputs, timing, and credits.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", - "operationId": "run_agent_api_agents__agent_id__runs_post", + } + }, + "/ai-assistant/memory-bank/{conversation_id}": { + "patch": { + "description": "Update the acceptance status of a memory bank AI assistant conversation turn. Set ``accepted`` to true to accept the proposed configuration, or false to decline it. The accepted status is recorded for audit purposes.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_memory_bank_accept_api_ai_assistant_memory_bank__conversation_id__patch", "parameters": [ { "in": "path", - "name": "agent_id", + "name": "conversation_id", "required": true, "schema": { - "title": "Agent Id", + "format": "uuid", + "title": "Conversation Id", "type": "string" } }, @@ -14134,7 +17055,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentRunRequest" + "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankAcceptRequest" } } }, @@ -14145,53 +17066,52 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentRunResponse" + "$ref": "#/components/schemas/OkResponse" } } }, "description": "Successful Response" }, - "402": { + "422": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InsufficientCreditsResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } }, - "description": "Insufficient credits \u2014 the account has exhausted its credits." + "description": "Validation Error" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Run an agent", + "summary": "Accept or decline a memory bank AI suggestion", "tags": [ - "agents" + "ai-assistant" ] } }, - "/agents/{agent_id}/runs/stream": { + "/ai-assistant/solution": { "post": { - "description": "Start a **priority** agent run and stream run events using Server-Sent Events (SSE).\n\nThis is the best option for interactive UIs where you want progress updates as the run executes.\n\nHow it works:\n- The first `init` event contains an `AgentRunResponse` snapshot, including the `run_id`.\n- Subsequent events are forwarded from the run event stream (status changes, step events, etc).\n- If the agent contains a `streaming_result` step, `stream_token` events deliver individual LLM tokens (with a `token` field) and a `stream_end` event signals completion.\n- The final `done` event contains the terminal snapshot (including `output` and `credits` when available).\n\nInput options (for `dynamic_input` triggers):\n- `input`: text input passed directly.\n- `input_upload_id`: reference a file uploaded via `POST /agents/{agent_id}/upload-input` (mutually exclusive with `input`).\n\nClient guidance:\n- Keep the connection open and handle keepalive comments.\n- On `timeout` or `error`, the payload includes `run_id` so clients can resume by polling `GET /agents/runs/{run_id}`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", - "operationId": "run_streaming_agent_api_agents__agent_id__runs_stream_post", + "description": "Generate a complete solution plan covering sources, knowledge bases, and agents without requiring an existing solution. Supports SSE streaming when ``Accept: text/event-stream`` is set.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_solution_api_ai_assistant_solution_post", "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14203,7 +17123,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AgentRunStreamRequest" + "$ref": "#/components/schemas/routers__api__solutions__AiAssistantGenerateRequest" } } }, @@ -14211,28 +17131,14 @@ }, "responses": { "200": { - "content": { - "application/json": { - "schema": {} - }, - "text/event-stream": { - "example": ": keepalive\n\nevent: init\ndata: {\"run_id\":\"...\",\"status\":\"pending\",\"error_count\":0,\"credits\":0.0,\"priority\":true,\"input\":\"...\",\"output\":null,\"attempts\":[]}\n\nevent: done\ndata: {\"run_id\":\"...\",\"status\":\"completed\",\"error_count\":0,\"credits\":0.0,\"priority\":true,\"input\":\"...\",\"output\":\"...\",\"attempts\":[]}\n\n", - "schema": { - "type": "string" - } - } - }, - "description": "Streams agent run events via Server-Sent Events (SSE); run is always created as priority.\n\nSSE events:\n- `event: init` \u2014 `data` is an `AgentRunResponse` snapshot (includes `run_id`).\n- `event: done` \u2014 `data` is the final `AgentRunResponse` snapshot (includes `output`, `credits`, etc).\n- Other events (e.g. `status`, step events) are forwarded from the run event stream.\n- On `timeout` / `error`, the payload includes `run_id` so clients can fetch status via `GET /agents/runs/{run_id}`." - }, - "402": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InsufficientCreditsResponse" + "$ref": "#/components/schemas/AiAssistantGenerateResponse" } } }, - "description": "Insufficient credits \u2014 the account has exhausted its credits." + "description": "Successful Response" }, "422": { "content": { @@ -14243,122 +17149,37 @@ } }, "description": "Validation Error" - } - }, - "summary": "Run an agent (stream events)", - "tags": [ - "agents" - ] - } - }, - "/agents/{agent_id}/runs/{run_id}/evaluation-results": { - "get": { - "description": "List evaluation results recorded for a specific agent run.\n\nResponse shape is version-gated by the ``Seclai-Version`` header:\n\n- **Default / legacy** (no header, or a date before ``2026-07-27``): a bare\n JSON array of results (unpaginated \u2014 every result for the run).\n- **``Seclai-Version: 2026-07-27`` or later**: the canonical paginated\n envelope ``{data, pagination: {page, limit, total, pages, has_next,\n has_prev}}``.\n\nResults span all evaluation criteria for the given run, useful for getting a\ncomplete quality snapshot of a single execution.", - "operationId": "list_run_evaluation_results_api_agents__agent_id__runs__run_id__evaluation_results_get", - "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } - }, - { - "in": "path", - "name": "run_id", - "required": true, - "schema": { - "title": "Run Id", - "type": "string" - } - }, - { - "in": "query", - "name": "page", - "required": false, - "schema": { - "default": 1, - "minimum": 1, - "title": "Page", - "type": "integer" - } - }, - { - "in": "query", - "name": "limit", - "required": false, - "schema": { - "default": 20, - "maximum": 100, - "minimum": 1, - "title": "Limit", - "type": "integer" - } - }, - { - "$ref": "#/components/parameters/X-Account-Id" }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "responses": { - "200": { + "503": { "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/EvaluationResultWithCriteriaResponse" - }, - "title": "Response List Run Evaluation Results Api Agents Agent Id Runs Run Id Evaluation Results Get", - "type": "array" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Successful Response" - }, - "422": { - "content": { - "application/json": { + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "type": "integer" } } - }, - "description": "Validation Error" + } } }, - "summary": "List Run Evaluation Results", + "summary": "Generate a solution plan (standalone)", "tags": [ - "agent-evaluations" + "ai-assistant" ] - } - }, - "/agents/{agent_id}/triggers/{trigger_id}/email-config": { - "put": { - "description": "Set the custom alias, sender allowlist, and inbound-handling flags (`ignore_auto_generated`, `require_sender_auth`, `queue_on_quota`) on an agent's EMAIL_RECEIVED trigger, and return its computed email address(es). Omitted fields are left unchanged.\n\nAuth & scoping: requires `X-API-Key` header or OAuth Bearer token; the trigger must belong to an agent in the key's account.", - "operationId": "set_email_trigger_config_api_api_agents__agent_id__triggers__trigger_id__email_config_put", - "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } - }, - { - "in": "path", - "name": "trigger_id", - "required": true, - "schema": { - "title": "Trigger Id", - "type": "string" - } - }, + } + }, + "/ai-assistant/source": { + "post": { + "description": "Generate a content source creation/modification plan without requiring an existing solution. The AI proposes actions for the user to review before any changes are made.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_source_api_ai_assistant_source_post", + "parameters": [ { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14370,7 +17191,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__agents__SetEmailTriggerConfigRequest" + "$ref": "#/components/schemas/routers__api__solutions__AiAssistantGenerateRequest" } } }, @@ -14381,7 +17202,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EmailTriggerConfigResponse" + "$ref": "#/components/schemas/AiAssistantGenerateResponse" } } }, @@ -14396,68 +17217,47 @@ } }, "description": "Validation Error" - } - }, - "summary": "Configure an EMAIL_RECEIVED trigger", - "tags": [ - "agents" - ] - } - }, - "/agents/{agent_id}/upload-input": { - "post": { - "description": "Upload a file to use as input for a `dynamic_input` agent run.\n\nSupports the same file types as content source uploads: text, PDF, DOCX, audio, video, images, etc. Text and document files are processed synchronously; audio/video are submitted for asynchronous transcription.\n\n**Size limit:** 200 MB per file.\n\n**Supported extensions:** txt, html, md, csv, xml, json, pdf, msg, docx, doc, pptx, ppt, xlsx, xls, zip, epub, png, jpg, gif, bmp, tiff, webp, mp3, wav, m4a, flac, ogg, mp4, mov, avi.\n\nAfter uploading, poll `GET /agents/{agent_id}/input-uploads/{upload_id}` until `status` is `ready`, then pass `input_upload_id` to `POST /agents/{agent_id}/runs`.\n\n**Multi-modal routing:** non-text uploads (image, audio, video, PDF) are surfaced natively to multi-modal-capable prompt steps; text-only models fall back to the OCR / transcript text counterpart. Audio originals are preserved past transcription so audio-capable models (Gemini 2.5/3, GPT-5 audio) read them directly; the agent-input-binary janitor sweeps originals once they pass your account's agent-trace retention (the agent-traces source's retention period; free default 7 days).\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account.", - "operationId": "api_upload_agent_input_api_agents__agent_id__upload_input_post", - "parameters": [ - { - "in": "path", - "name": "agent_id", - "required": true, - "schema": { - "title": "Agent Id", - "type": "string" - } }, - { - "$ref": "#/components/parameters/X-Account-Id" - }, - { - "$ref": "#/components/parameters/Seclai-Version" - } - ], - "responses": { - "202": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UploadAgentInputApiResponse" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Successful Response" - }, - "422": { - "content": { - "application/json": { + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "type": "integer" } } - }, - "description": "Validation Error" + } } }, - "summary": "Upload file input", + "summary": "Generate a source plan (standalone)", "tags": [ - "agents" + "ai-assistant" ] } }, - "/ai-assistant/feedback": { + "/ai-assistant/{conversation_id}/accept": { "post": { - "description": "Submit thumbs-up/down feedback on any AI assistant interaction. Negative feedback with a comment is analyzed for concerning issues.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_feedback_api_ai_assistant_feedback_post", + "description": "Accept and execute a previously proposed standalone plan. If the plan contains destructive actions (deletions), ``confirm_deletions`` must be set to true.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_accept_api_ai_assistant__conversation_id__accept_post", "parameters": [ + { + "in": "path", + "name": "conversation_id", + "required": true, + "schema": { + "format": "uuid", + "title": "Conversation Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14469,7 +17269,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__ai_assistant__AiAssistantFeedbackRequest" + "$ref": "#/components/schemas/routers__api__solutions__AiAssistantAcceptRequest" } } }, @@ -14480,7 +17280,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiAssistantFeedbackResponse" + "$ref": "#/components/schemas/AiAssistantAcceptResponse" } } }, @@ -14495,19 +17295,47 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Submit AI assistant feedback", + "summary": "Accept and execute a standalone plan", "tags": [ "ai-assistant" ] } }, - "/ai-assistant/knowledge-base": { + "/ai-assistant/{conversation_id}/decline": { "post": { - "description": "Generate a knowledge base creation/modification plan without requiring an existing solution. May also propose prerequisite source creation actions.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_knowledge_base_api_ai_assistant_knowledge_base_post", + "description": "Decline a previously proposed standalone plan. No resources are modified. The conversation is marked as declined.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", + "operationId": "api_ai_decline_api_ai_assistant__conversation_id__decline_post", "parameters": [ + { + "in": "path", + "name": "conversation_id", + "required": true, + "schema": { + "format": "uuid", + "title": "Conversation Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14515,49 +17343,169 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/routers__api__solutions__AiAssistantGenerateRequest" - } - } - }, - "required": true - }, "responses": { - "200": { + "204": { + "description": "Successful Response" + }, + "422": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiAssistantGenerateResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } }, - "description": "Successful Response" + "description": "Validation Error" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Generate a knowledge base plan (standalone)", + "summary": "Decline a standalone plan", "tags": [ "ai-assistant" ] } }, - "/ai-assistant/memory-bank": { - "post": { - "description": "Generate a memory bank configuration suggestion via the AI assistant. The AI proposes name, type, mode, compaction prompt, and retention settings.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_memory_bank_api_ai_assistant_memory_bank_post", + "/alerts": { + "get": { + "description": "List alerts for the account with optional filters.\n\nFilters:\n- `status`: triggered, acknowledged, resolved, dismissed\n- `agent_id`: filter by agent\n- `source_connection_id`: filter by source\n- `time_from` / `time_to`: ISO 8601 date range\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Results are scoped to the caller's account.", + "operationId": "list_alerts_api_alerts_get", "parameters": [ + { + "description": "Page number", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "description": "Page number", + "minimum": 1, + "title": "Page", + "type": "integer" + } + }, + { + "description": "Items per page", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "description": "Items per page", + "maximum": 100, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, + { + "description": "Filter by alert status", + "in": "query", + "name": "status", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by alert status", + "title": "Status" + } + }, + { + "description": "Filter by agent ID", + "in": "query", + "name": "agent_id", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by agent ID", + "title": "Agent Id" + } + }, + { + "description": "Filter by source connection ID", + "in": "query", + "name": "source_connection_id", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by source connection ID", + "title": "Source Connection Id" + } + }, + { + "description": "From (ISO 8601)", + "in": "query", + "name": "time_from", + "required": false, + "schema": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "From (ISO 8601)", + "title": "Time From" + } + }, + { + "description": "To (ISO 8601)", + "in": "query", + "name": "time_to", + "required": false, + "schema": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "To (ISO 8601)", + "title": "Time To" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14565,22 +17513,12 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankAiAssistantRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MemoryBankAiAssistantResponse" + "$ref": "#/components/schemas/routers__api__alerts__AlertListResponse" } } }, @@ -14595,43 +17533,115 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Generate a memory bank configuration (standalone)", + "summary": "List alerts", "tags": [ - "ai-assistant" + "alerts" ] } }, - "/ai-assistant/memory-bank/last-conversation": { + "/alerts/configs": { "get": { - "description": "Fetch the most recent memory bank AI assistant conversation turns for the authenticated user. Returns turns in oldest-first order with a total count for pagination via limit/offset query parameters.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_memory_bank_history_api_ai_assistant_memory_bank_last_conversation_get", + "description": "List alert configurations.\n\nFilters:\n- `agent_id`: list configs for a specific agent\n- `source_connection_id`: list configs for a specific source\n- Neither: list account-level agent alert configs\n- `scope=source`: list account-level source alert configs\n\nCredits alerts (`credits_low_threshold`, `credits_runout_prediction`, `credits_usage_spike`) are account-level alert configs. They are evaluated by the credits alert sweep and default-enabled configs may be auto-created for active accounts at runtime.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "list_alert_configs_api_alerts_configs_get", "parameters": [ { - "description": "Max turns.", + "description": "Filter by agent ID", "in": "query", - "name": "limit", + "name": "agent_id", "required": false, "schema": { - "default": 5, - "description": "Max turns.", - "maximum": 50, + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by agent ID", + "title": "Agent Id" + } + }, + { + "description": "Filter by source connection ID", + "in": "query", + "name": "source_connection_id", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by source connection ID", + "title": "Source Connection Id" + } + }, + { + "description": "Set to 'source' to list account-level source alert configs", + "in": "query", + "name": "scope", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Set to 'source' to list account-level source alert configs", + "title": "Scope" + } + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "description": "Page number", "minimum": 1, - "title": "Limit", + "title": "Page", "type": "integer" } }, { - "description": "Skip count.", + "description": "Items per page", "in": "query", - "name": "offset", + "name": "limit", "required": false, "schema": { - "default": 0, - "description": "Skip count.", - "minimum": 0, - "title": "Offset", + "default": 50, + "description": "Items per page", + "maximum": 100, + "minimum": 1, + "title": "Limit", "type": "integer" } }, @@ -14647,7 +17657,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankLastConversationResponse" + "$ref": "#/components/schemas/AlertConfigListResponse" } } }, @@ -14662,29 +17672,35 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Fetch memory bank AI conversation history", + "summary": "List alert configs", "tags": [ - "ai-assistant" + "alerts" ] - } - }, - "/ai-assistant/memory-bank/{conversation_id}": { - "patch": { - "description": "Update the acceptance status of a memory bank AI assistant conversation turn. Set ``accepted`` to true to accept the proposed configuration, or false to decline it. The accepted status is recorded for audit purposes.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_memory_bank_accept_api_ai_assistant_memory_bank__conversation_id__patch", + }, + "post": { + "description": "Create a new alert configuration.\n\nAgent alert types: run_failed, consecutive_failures, error_rate_spike, run_burst, slow_run, credits_low_threshold, credits_runout_prediction, credits_usage_spike, non_manual_eval_failed, non_manual_eval_flagged, governance_flagged, governance_blocked, model_newer_available, model_deprecated, model_sunset.\nSource alert types: pull_failed, consecutive_pull_failures, pull_error_rate_spike.\n\nDistribution types: owner, owner_admins, selected_members. Organization accounts are normalized to owner_admins.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "create_alert_config_api_alerts_configs_post", "parameters": [ - { - "in": "path", - "name": "conversation_id", - "required": true, - "schema": { - "format": "uuid", - "title": "Conversation Id", - "type": "string" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14696,18 +17712,18 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__memory_banks__MemoryBankAcceptRequest" + "$ref": "#/components/schemas/CreateAlertConfigRequest" } } }, "required": true }, "responses": { - "200": { + "201": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OkResponse" + "$ref": "#/components/schemas/AlertConfigResponse" } } }, @@ -14722,19 +17738,46 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Accept or decline a memory bank AI suggestion", + "summary": "Create alert config", "tags": [ - "ai-assistant" + "alerts" ] } }, - "/ai-assistant/solution": { - "post": { - "description": "Generate a complete solution plan covering sources, knowledge bases, and agents without requiring an existing solution. Supports SSE streaming when ``Accept: text/event-stream`` is set.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_solution_api_ai_assistant_solution_post", + "/alerts/configs/{config_id}": { + "delete": { + "description": "Delete an alert configuration. This permanently removes the config and stops any future alerts of this type from being triggered.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "delete_alert_config_api_alerts_configs__config_id__delete", "parameters": [ + { + "in": "path", + "name": "config_id", + "required": true, + "schema": { + "title": "Config Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14742,49 +17785,57 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/routers__api__solutions__AiAssistantGenerateRequest" - } - } - }, - "required": true - }, "responses": { - "200": { + "204": { + "description": "Successful Response" + }, + "422": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiAssistantGenerateResponse" + "$ref": "#/components/schemas/HTTPValidationError" } } }, - "description": "Successful Response" + "description": "Validation Error" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Generate a solution plan (standalone)", + "summary": "Delete alert config", "tags": [ - "ai-assistant" + "alerts" ] - } - }, - "/ai-assistant/source": { - "post": { - "description": "Generate a content source creation/modification plan without requiring an existing solution. The AI proposes actions for the user to review before any changes are made.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_source_api_ai_assistant_source_post", + }, + "get": { + "description": "Get a specific alert configuration by ID.\n\nReturns all fields including type, enabled state, threshold, cooldown, distribution type, and recipient list.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "get_alert_config_api_alerts_configs__config_id__get", "parameters": [ + { + "in": "path", + "name": "config_id", + "required": true, + "schema": { + "title": "Config Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -14792,22 +17843,12 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/routers__api__solutions__AiAssistantGenerateRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiAssistantGenerateResponse" + "$ref": "#/components/schemas/AlertConfigResponse" } } }, @@ -14822,26 +17863,41 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Generate a source plan (standalone)", + "summary": "Get alert config", "tags": [ - "ai-assistant" + "alerts" ] - } - }, - "/ai-assistant/{conversation_id}/accept": { - "post": { - "description": "Accept and execute a previously proposed standalone plan. If the plan contains destructive actions (deletions), ``confirm_deletions`` must be set to true.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_accept_api_ai_assistant__conversation_id__accept_post", + }, + "patch": { + "description": "Update an alert configuration. Only provided fields are updated.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "update_alert_config_api_alerts_configs__config_id__patch", "parameters": [ { "in": "path", - "name": "conversation_id", + "name": "config_id", "required": true, "schema": { - "format": "uuid", - "title": "Conversation Id", + "title": "Config Id", "type": "string" } }, @@ -14856,7 +17912,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__solutions__AiAssistantAcceptRequest" + "$ref": "#/components/schemas/UpdateAlertConfigRequest" } } }, @@ -14867,7 +17923,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AiAssistantAcceptResponse" + "$ref": "#/components/schemas/AlertConfigResponse" } } }, @@ -14882,27 +17938,66 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Accept and execute a standalone plan", + "summary": "Update alert config", "tags": [ - "ai-assistant" + "alerts" ] } }, - "/ai-assistant/{conversation_id}/decline": { - "post": { - "description": "Decline a previously proposed standalone plan. No resources are modified. The conversation is marked as declined.\n\nAuth: requires ``X-API-Key`` header or OAuth Bearer token.", - "operationId": "api_ai_decline_api_ai_assistant__conversation_id__decline_post", + "/alerts/organization-preferences/list": { + "get": { + "description": "List per-organization alert delivery preferences for the authenticated user.\n\nBy default, only explicit override rows are returned. Set `include_defaults=true` to return the effective subscribed state for every alert type in every organization the user can manage.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.\n- Only organizations where the user is an owner or administrator are included.", + "operationId": "list_organization_preferences_api_alerts_organization_preferences_list_get", "parameters": [ { - "in": "path", - "name": "conversation_id", - "required": true, + "description": "Optional organization filter", + "in": "query", + "name": "organization_id", + "required": false, "schema": { - "format": "uuid", - "title": "Conversation Id", - "type": "string" + "anyOf": [ + { + "format": "uuid", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Optional organization filter", + "title": "Organization Id" + } + }, + { + "description": "Include default subscribed entries for all alert types", + "in": "query", + "name": "include_defaults", + "required": false, + "schema": { + "default": false, + "description": "Include default subscribed entries for all alert types", + "title": "Include Defaults", + "type": "boolean" } }, { @@ -14913,7 +18008,14 @@ } ], "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OrganizationAlertPreferenceListResponse" + } + } + }, "description": "Successful Response" }, "422": { @@ -14925,136 +18027,131 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Decline a standalone plan", + "summary": "List organization alert delivery preferences", "tags": [ - "ai-assistant" + "alerts" ] } }, - "/alerts": { - "get": { - "description": "List alerts for the account with optional filters.\n\nFilters:\n- `status`: triggered, acknowledged, resolved, dismissed\n- `agent_id`: filter by agent\n- `source_connection_id`: filter by source\n- `time_from` / `time_to`: ISO 8601 date range\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Results are scoped to the caller's account.", - "operationId": "list_alerts_api_alerts_get", + "/alerts/organization-preferences/{organization_id}/{alert_type}": { + "patch": { + "description": "Update the authenticated user's personal delivery preference for one alert type in one organization.\n\nSetting `subscribed=false` stores an explicit opt-out override. Setting `subscribed=true` removes the override and restores the default subscribed behavior.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.\n- Only owners and administrators can update preferences for an organization.", + "operationId": "update_organization_preference_api_alerts_organization_preferences__organization_id___alert_type__patch", "parameters": [ { - "description": "Page number", - "in": "query", - "name": "page", - "required": false, + "in": "path", + "name": "organization_id", + "required": true, "schema": { - "default": 1, - "description": "Page number", - "minimum": 1, - "title": "Page", - "type": "integer" + "format": "uuid", + "title": "Organization Id", + "type": "string" } }, { - "description": "Items per page", - "in": "query", - "name": "limit", - "required": false, + "in": "path", + "name": "alert_type", + "required": true, "schema": { - "default": 20, - "description": "Items per page", - "maximum": 100, - "minimum": 1, - "title": "Limit", - "type": "integer" + "title": "Alert Type", + "type": "string" } }, { - "description": "Filter by alert status", - "in": "query", - "name": "status", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Filter by alert status", - "title": "Status" - } + "$ref": "#/components/parameters/X-Account-Id" }, { - "description": "Filter by agent ID", - "in": "query", - "name": "agent_id", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Filter by agent ID", - "title": "Agent Id" + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__alerts__UpdateOrganizationAlertPreferenceRequest" + } } }, - { - "description": "Filter by source connection ID", - "in": "query", - "name": "source_connection_id", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__alerts__OrganizationAlertPreferenceResponse" } - ], - "description": "Filter by source connection ID", - "title": "Source Connection Id" - } + } + }, + "description": "Successful Response" }, - { - "description": "From (ISO 8601)", - "in": "query", - "name": "time_from", - "required": false, - "schema": { - "anyOf": [ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" } - ], - "description": "From (ISO 8601)", - "title": "Time From" + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } } - }, + } + }, + "summary": "Update organization alert delivery preference", + "tags": [ + "alerts" + ] + } + }, + "/alerts/{alert_id}": { + "get": { + "description": "Get full alert detail including history, comments, and subscribers.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "get_alert_detail_api_alerts__alert_id__get", + "parameters": [ { - "description": "To (ISO 8601)", - "in": "query", - "name": "time_to", - "required": false, + "in": "path", + "name": "alert_id", + "required": true, "schema": { - "anyOf": [ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "To (ISO 8601)", - "title": "Time To" + "title": "Alert Id", + "type": "string" } }, { @@ -15069,7 +18166,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__AlertListResponse" + "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" } } }, @@ -15084,98 +18181,44 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List alerts", + "summary": "Get alert detail", "tags": [ "alerts" ] } }, - "/alerts/configs": { - "get": { - "description": "List alert configurations.\n\nFilters:\n- `agent_id`: list configs for a specific agent\n- `source_connection_id`: list configs for a specific source\n- Neither: list account-level agent alert configs\n- `scope=source`: list account-level source alert configs\n\nCredits alerts (`credits_low_threshold`, `credits_runout_prediction`, `credits_usage_spike`) are account-level alert configs. They are evaluated by the credits alert sweep and default-enabled configs may be auto-created for active accounts at runtime.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "list_alert_configs_api_alerts_configs_get", + "/alerts/{alert_id}/comments": { + "post": { + "description": "Add a comment to an alert. Comments are visible to all subscribers and are included in the alert detail response.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "add_alert_comment_api_alerts__alert_id__comments_post", "parameters": [ { - "description": "Filter by agent ID", - "in": "query", - "name": "agent_id", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Filter by agent ID", - "title": "Agent Id" - } - }, - { - "description": "Filter by source connection ID", - "in": "query", - "name": "source_connection_id", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Filter by source connection ID", - "title": "Source Connection Id" - } - }, - { - "description": "Set to 'source' to list account-level source alert configs", - "in": "query", - "name": "scope", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Set to 'source' to list account-level source alert configs", - "title": "Scope" - } - }, - { - "description": "Page number", - "in": "query", - "name": "page", - "required": false, - "schema": { - "default": 1, - "description": "Page number", - "minimum": 1, - "title": "Page", - "type": "integer" - } - }, - { - "description": "Items per page", - "in": "query", - "name": "limit", - "required": false, + "in": "path", + "name": "alert_id", + "required": true, "schema": { - "default": 50, - "description": "Items per page", - "maximum": 100, - "minimum": 1, - "title": "Limit", - "type": "integer" + "title": "Alert Id", + "type": "string" } }, { @@ -15185,12 +18228,22 @@ "$ref": "#/components/parameters/Seclai-Version" } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__alerts__AddCommentRequest" + } + } + }, + "required": true + }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlertConfigListResponse" + "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" } } }, @@ -15205,17 +18258,46 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List alert configs", + "summary": "Add alert comment", "tags": [ "alerts" ] - }, + } + }, + "/alerts/{alert_id}/status": { "post": { - "description": "Create a new alert configuration.\n\nAgent alert types: run_failed, consecutive_failures, error_rate_spike, run_burst, slow_run, credits_low_threshold, credits_runout_prediction, credits_usage_spike, non_manual_eval_failed, non_manual_eval_flagged, governance_flagged, governance_blocked, model_newer_available, model_deprecated, model_sunset.\nSource alert types: pull_failed, consecutive_pull_failures, pull_error_rate_spike.\n\nDistribution types: owner, owner_admins, selected_members. Organization accounts are normalized to owner_admins.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "create_alert_config_api_alerts_configs_post", + "description": "Change the status of an alert. Valid statuses: triggered, acknowledged, resolved, dismissed.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "change_alert_status_api_alerts__alert_id__status_post", "parameters": [ + { + "in": "path", + "name": "alert_id", + "required": true, + "schema": { + "title": "Alert Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -15227,18 +18309,18 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateAlertConfigRequest" + "$ref": "#/components/schemas/ChangeStatusRequest" } } }, "required": true }, "responses": { - "201": { + "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlertConfigResponse" + "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" } } }, @@ -15253,25 +18335,43 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Create alert config", + "summary": "Change alert status", "tags": [ "alerts" ] } }, - "/alerts/configs/{config_id}": { - "delete": { - "description": "Delete an alert configuration. This permanently removes the config and stops any future alerts of this type from being triggered.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "delete_alert_config_api_alerts_configs__config_id__delete", + "/alerts/{alert_id}/subscribe": { + "post": { + "description": "Subscribe the current user to an alert. Subscribed users receive email notifications when the alert status changes or new comments are added, for as long as they remain an owner or administrator of the account.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "subscribe_to_alert_api_alerts__alert_id__subscribe_post", "parameters": [ { "in": "path", - "name": "config_id", + "name": "alert_id", "required": true, "schema": { - "title": "Config Id", + "title": "Alert Id", "type": "string" } }, @@ -15283,7 +18383,14 @@ } ], "responses": { - "204": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" + } + } + }, "description": "Successful Response" }, "422": { @@ -15295,23 +18402,43 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Delete alert config", + "summary": "Subscribe to alert", "tags": [ "alerts" ] - }, - "get": { - "description": "Get a specific alert configuration by ID.\n\nReturns all fields including type, enabled state, threshold, cooldown, distribution type, and recipient list.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "get_alert_config_api_alerts_configs__config_id__get", + } + }, + "/alerts/{alert_id}/unsubscribe": { + "post": { + "description": "Unsubscribe the current user from an alert. The user will no longer receive email notifications for status changes or new comments on this alert.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "operationId": "unsubscribe_from_alert_api_alerts__alert_id__unsubscribe_post", "parameters": [ { "in": "path", - "name": "config_id", + "name": "alert_id", "required": true, "schema": { - "title": "Config Id", + "title": "Alert Id", "type": "string" } }, @@ -15327,7 +18454,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlertConfigResponse" + "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" } } }, @@ -15342,26 +18469,37 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get alert config", + "summary": "Unsubscribe from alert", "tags": [ "alerts" ] - }, - "patch": { - "description": "Update an alert configuration. Only provided fields are updated.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "update_alert_config_api_alerts_configs__config_id__patch", + } + }, + "/cloud-drives": { + "get": { + "description": "List the account's cloud-drive connections. Use a connection's `id` as `cloud_drive_connection_id` when creating a `cloud_drive` content source or binding a file-change agent trigger. `realtime_updates` reports whether changes arrive within seconds or on the scheduled backstop sweep.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "list_cloud_drives_api_api_cloud_drives_get", "parameters": [ - { - "in": "path", - "name": "config_id", - "required": true, - "schema": { - "title": "Config Id", - "type": "string" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -15369,80 +18507,51 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAlertConfigRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AlertConfigResponse" + "items": { + "$ref": "#/components/schemas/CloudDriveResponseModel" + }, + "title": "Response List Cloud Drives Api Api Cloud Drives Get", + "type": "array" } } }, "description": "Successful Response" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Update alert config", + "summary": "List the account's cloud-drive connections", "tags": [ - "alerts" + "cloud_drives" ] } }, - "/alerts/organization-preferences/list": { + "/cloud-drives/providers": { "get": { - "description": "List per-organization alert delivery preferences for the authenticated user.\n\nBy default, only explicit override rows are returned. Set `include_defaults=true` to return the effective subscribed state for every alert type in every organization the user can manage.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.\n- Only organizations where the user is an owner or administrator are included.", - "operationId": "list_organization_preferences_api_alerts_organization_preferences_list_get", + "description": "List the cloud-drive providers whose OAuth app is configured on this deployment (e.g. Dropbox, Google Drive), with the permissions each requests. A provider missing from this list cannot be connected here.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "list_cloud_drive_providers_api_api_cloud_drives_providers_get", "parameters": [ - { - "description": "Optional organization filter", - "in": "query", - "name": "organization_id", - "required": false, - "schema": { - "anyOf": [ - { - "format": "uuid", - "type": "string" - }, - { - "type": "null" - } - ], - "description": "Optional organization filter", - "title": "Organization Id" - } - }, - { - "description": "Include default subscribed entries for all alert types", - "in": "query", - "name": "include_defaults", - "required": false, - "schema": { - "default": false, - "description": "Include default subscribed entries for all alert types", - "title": "Include Defaults", - "type": "boolean" - } - }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -15455,50 +18564,53 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrganizationAlertPreferenceListResponse" + "items": { + "$ref": "#/components/schemas/CloudDriveProviderResponseModel" + }, + "title": "Response List Cloud Drive Providers Api Api Cloud Drives Providers Get", + "type": "array" } } }, "description": "Successful Response" }, - "422": { + "503": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "List organization alert delivery preferences", + "summary": "List configured cloud-drive providers", "tags": [ - "alerts" + "cloud_drives" ] } }, - "/alerts/organization-preferences/{organization_id}/{alert_type}": { - "patch": { - "description": "Update the authenticated user's personal delivery preference for one alert type in one organization.\n\nSetting `subscribed=false` stores an explicit opt-out override. Setting `subscribed=true` removes the override and restores the default subscribed behavior.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.\n- Only owners and administrators can update preferences for an organization.", - "operationId": "update_organization_preference_api_alerts_organization_preferences__organization_id___alert_type__patch", + "/cloud-drives/{connection_id}": { + "delete": { + "description": "Soft-delete a connection and clear its tokens. Refused with **409** while anything still depends on it \u2014 a live agent trigger, or a `cloud_drive` content source ingesting into a knowledge base. `GET /{connection_id}/agents` shows which agents reference it, but does NOT list content sources, so treat the 409 as the authoritative check rather than a clean /agents response.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "delete_cloud_drive_api_api_cloud_drives__connection_id__delete", "parameters": [ { "in": "path", - "name": "organization_id", + "name": "connection_id", "required": true, "schema": { "format": "uuid", - "title": "Organization Id", - "type": "string" - } - }, - { - "in": "path", - "name": "alert_type", - "required": true, - "schema": { - "title": "Alert Type", + "title": "Connection Id", "type": "string" } }, @@ -15509,22 +18621,12 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/routers__api__alerts__UpdateOrganizationAlertPreferenceRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__OrganizationAlertPreferenceResponse" + "$ref": "#/components/schemas/OkResponse" } } }, @@ -15539,25 +18641,42 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Update organization alert delivery preference", + "summary": "Delete a cloud-drive connection", "tags": [ - "alerts" + "cloud_drives" ] - } - }, - "/alerts/{alert_id}": { + }, "get": { - "description": "Get full alert detail including history, comments, and subscribers.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "get_alert_detail_api_alerts__alert_id__get", + "description": "Fetch a single cloud-drive connection by id.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "get_cloud_drive_api_api_cloud_drives__connection_id__get", "parameters": [ { "in": "path", - "name": "alert_id", + "name": "connection_id", "required": true, "schema": { - "title": "Alert Id", + "format": "uuid", + "title": "Connection Id", "type": "string" } }, @@ -15573,7 +18692,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" + "$ref": "#/components/schemas/CloudDriveResponseModel" } } }, @@ -15588,25 +18707,42 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Get alert detail", + "summary": "Get a cloud-drive connection", "tags": [ - "alerts" + "cloud_drives" ] - } - }, - "/alerts/{alert_id}/comments": { - "post": { - "description": "Add a comment to an alert. Comments are visible to all subscribers and are included in the alert detail response.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "add_alert_comment_api_alerts__alert_id__comments_post", + }, + "patch": { + "description": "Rename a connection and/or change the folder it watches. Changing the folder resets the sync cursor, so existing files in the new folder are not replayed as triggers.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "update_cloud_drive_api_api_cloud_drives__connection_id__patch", "parameters": [ { "in": "path", - "name": "alert_id", + "name": "connection_id", "required": true, "schema": { - "title": "Alert Id", + "format": "uuid", + "title": "Connection Id", "type": "string" } }, @@ -15621,7 +18757,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__AddCommentRequest" + "$ref": "#/components/schemas/CloudDriveUpdateRequest" } } }, @@ -15632,7 +18768,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" + "$ref": "#/components/schemas/CloudDriveResponseModel" } } }, @@ -15647,25 +18783,44 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Add alert comment", + "summary": "Update a cloud-drive connection", "tags": [ - "alerts" + "cloud_drives" ] } }, - "/alerts/{alert_id}/status": { - "post": { - "description": "Change the status of an alert. Valid statuses: triggered, acknowledged, resolved, dismissed.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "change_alert_status_api_alerts__alert_id__status_post", + "/cloud-drives/{connection_id}/agents": { + "get": { + "description": "Agents that reference this connection \u2014 via a cloud-drive step, a `prompt_call` cloud-drive tool, or a file-change trigger. Check this before disconnecting or deleting a connection.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "get_agents_using_cloud_drive_api_api_cloud_drives__connection_id__agents_get", "parameters": [ { "in": "path", - "name": "alert_id", + "name": "connection_id", "required": true, "schema": { - "title": "Alert Id", + "format": "uuid", + "title": "Connection Id", "type": "string" } }, @@ -15676,22 +18831,16 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChangeStatusRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" + "items": { + "$ref": "#/components/schemas/AgentUsingCloudDriveResponseModel" + }, + "title": "Response Get Agents Using Cloud Drive Api Api Cloud Drives Connection Id Agents Get", + "type": "array" } } }, @@ -15706,25 +18855,44 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Change alert status", + "summary": "List agents using a cloud-drive connection", "tags": [ - "alerts" + "cloud_drives" ] } }, - "/alerts/{alert_id}/subscribe": { + "/cloud-drives/{connection_id}/disconnect": { "post": { - "description": "Subscribe the current user to an alert. Subscribed users receive email notifications when the alert status changes or new comments are added.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "subscribe_to_alert_api_alerts__alert_id__subscribe_post", + "description": "Revoke and clear the stored tokens and stop change notifications, keeping the connection row so it can be reconnected from the app. Agents bound to it stop firing until it is reconnected.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "disconnect_cloud_drive_api_api_cloud_drives__connection_id__disconnect_post", "parameters": [ { "in": "path", - "name": "alert_id", + "name": "connection_id", "required": true, "schema": { - "title": "Alert Id", + "format": "uuid", + "title": "Connection Id", "type": "string" } }, @@ -15740,7 +18908,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" + "$ref": "#/components/schemas/CloudDriveResponseModel" } } }, @@ -15755,28 +18923,59 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Subscribe to alert", + "summary": "Disconnect a cloud-drive connection", "tags": [ - "alerts" + "cloud_drives" ] } }, - "/alerts/{alert_id}/unsubscribe": { - "post": { - "description": "Unsubscribe the current user from an alert. The user will no longer receive email notifications for status changes or new comments on this alert.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", - "operationId": "unsubscribe_from_alert_api_alerts__alert_id__unsubscribe_post", + "/cloud-drives/{connection_id}/rejections": { + "get": { + "description": "Recent files the connection deliberately skipped, newest first, with the reason: `too_large` (above the size cap), `download_failed` (the provider would not serve the bytes), or `flood` (the per-sync or per-account run cap was hit, so remaining changes were dropped).\n\nThis is the answer to \"why didn't my agent run for that file?\" \u2014 a skipped file fires no trigger and appears nowhere else.\n\nRequires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned.", + "operationId": "list_cloud_drive_rejections_api_api_cloud_drives__connection_id__rejections_get", "parameters": [ { "in": "path", - "name": "alert_id", + "name": "connection_id", "required": true, "schema": { - "title": "Alert Id", + "format": "uuid", + "title": "Connection Id", "type": "string" } }, + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 50, + "maximum": 200, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -15789,7 +18988,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__alerts__AlertDetailResponse" + "items": { + "$ref": "#/components/schemas/CloudDriveRejectionResponseModel" + }, + "title": "Response List Cloud Drive Rejections Api Api Cloud Drives Connection Id Rejections Get", + "type": "array" } } }, @@ -15804,17 +19007,35 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Unsubscribe from alert", + "summary": "List files this connection did not process", "tags": [ - "alerts" + "cloud_drives" ] } }, "/contents/{source_connection_content_version}": { "delete": { - "description": "Delete a content item (a `SourceConnectionContentVersion`).\n\nUse this to remove an uploaded or indexed item from your account. Deleting content can affect agents and knowledge base workflows that reference this item.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only delete content belonging to your account.", + "description": "Delete a content item (a `SourceConnectionContentVersion`).\n\nUse this to remove an uploaded or indexed item from your account. Deleting content can affect agents and knowledge base workflows that reference this item.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only delete content belonging to your account.\n- A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected.", "operationId": "delete_content_api_contents__source_connection_content_version__delete", "parameters": [ { @@ -15837,6 +19058,9 @@ "204": { "description": "Successful Response" }, + "403": { + "description": "The key's user is a member of the account but not an owner or administrator (`error.code` is `permission_denied`)." + }, "422": { "content": { "application/json": { @@ -15846,6 +19070,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete content", @@ -15913,6 +19155,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get content details", @@ -15921,7 +19181,7 @@ ] }, "put": { - "description": "Replace a content version using a small inline text payload.\n\n**Maximum payload size:** 8192 bytes (UTF-8).\n\n**Supported content types:**\n- `application/json`\n- `application/xml`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n\nNotes:\n- Use this endpoint for small text payloads; larger files should use `/upload`.\n- `title` is merged into `metadata.title` when not already present.", + "description": "Replace a content version using a small inline text payload.\n\n**Maximum payload size:** 8192 bytes (UTF-8).\n\n**Supported content types:**\n- `application/json`\n- `application/xml`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n\nNotes:\n- A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected.\n- Use this endpoint for small text payloads; larger files should use `/upload`.\n- `title` is merged into `metadata.title` when not already present.\n- The replacement is indexed in the background. This `SourceConnectionContentVersion` ID keeps working, and reads return the previous content until indexing finishes; poll `list_source_content_status` to follow it. The returned `content_version_id` is the new version.", "operationId": "replace_content_with_inline_text_api_contents__source_connection_content_version__put", "parameters": [ { @@ -15961,6 +19221,9 @@ }, "description": "Successful Response" }, + "403": { + "description": "The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`)." + }, "422": { "content": { "application/json": { @@ -15970,6 +19233,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Replace a content version with inline text", @@ -16039,6 +19320,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List content embeddings", @@ -16049,7 +19348,7 @@ }, "/contents/{source_connection_content_version}/upload": { "post": { - "description": "Upload a new file and replace the content backing an existing `SourceConnectionContentVersion`.\n\nThis behaves like a source file upload, but it targets an existing content version ID. This is useful when you want to correct or update an uploaded document while keeping references stable.\n\n**Maximum file size:** 209715200 bytes.\n\n**Supported MIME types:**\n- `application/epub+zip`\n- `application/json`\n- `application/pdf`\n- `application/vnd.ms-excel`\n- `application/vnd.ms-outlook`\n- `application/vnd.ms-powerpoint`\n- `application/vnd.openxmlformats-officedocument.presentationml.presentation`\n- `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`\n- `application/vnd.openxmlformats-officedocument.wordprocessingml.document`\n- `application/xml`\n- `application/zip`\n- `audio/flac`\n- `audio/mp4`\n- `audio/mpeg`\n- `audio/ogg`\n- `audio/wav`\n- `image/bmp`\n- `image/gif`\n- `image/jpeg`\n- `image/png`\n- `image/svg+xml`\n- `image/tiff`\n- `image/webp`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n- `video/mp4`\n- `video/quicktime`\n- `video/x-msvideo`\n\nNotes:\n- If the uploaded file's content type is `application/octet-stream`, the server attempts to infer the type from the file extension.\n- Use `metadata` to attach an arbitrary JSON object of metadata (for example `metadata={\"category\":\"docs\"}`).\n- `title` is a convenience field and is merged into the metadata as `metadata.title` (it does not override an existing `metadata.title`).\n- For backwards compatibility, you can also pass form fields named `metadata_` (for example `metadata_author=...`). These override keys from `metadata`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only replace content belonging to your account.", + "description": "Upload a new file and replace the content backing an existing `SourceConnectionContentVersion`.\n\nThis behaves like a source file upload, but it targets an existing content version ID. This is useful when you want to correct or update an uploaded document while keeping references stable.\n\n**Maximum file size:** 209715200 bytes, except `image/svg+xml` at 5242880 bytes (SVG is sanitized before it is stored).\n\n**Supported MIME types:**\n- `application/epub+zip`\n- `application/json`\n- `application/pdf`\n- `application/vnd.ms-excel`\n- `application/vnd.ms-outlook`\n- `application/vnd.ms-powerpoint`\n- `application/vnd.openxmlformats-officedocument.presentationml.presentation`\n- `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`\n- `application/vnd.openxmlformats-officedocument.wordprocessingml.document`\n- `application/xml`\n- `application/zip`\n- `audio/flac`\n- `audio/mp4`\n- `audio/mpeg`\n- `audio/ogg`\n- `audio/wav`\n- `image/bmp`\n- `image/gif`\n- `image/jpeg`\n- `image/png`\n- `image/svg+xml`\n- `image/tiff`\n- `image/webp`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n- `video/mp4`\n- `video/quicktime`\n- `video/x-msvideo`\n\nNotes:\n- A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected.\n- The replacement is indexed in the background. This `SourceConnectionContentVersion` ID keeps working, and reads return the previous content until indexing finishes; poll `list_source_content_status` to follow it. The returned `content_version_id` is the new version.\n- If the uploaded file's content type is `application/octet-stream`, the server attempts to infer the type from the file extension.\n- Use `metadata` to attach an arbitrary JSON object of metadata (for example `metadata={\"category\":\"docs\"}`).\n- `title` is a convenience field and is merged into the metadata as `metadata.title` (it does not override an existing `metadata.title`).\n- For backwards compatibility, you can also pass form fields named `metadata_` (for example `metadata_author=...`). These override keys from `metadata`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only replace content belonging to your account.", "operationId": "upload_file_to_content_api_contents__source_connection_content_version__upload_post", "parameters": [ { @@ -16089,6 +19388,9 @@ }, "description": "Successful Response" }, + "403": { + "description": "The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`)." + }, "422": { "content": { "application/json": { @@ -16098,6 +19400,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Replace a content version with a new upload", @@ -16181,6 +19501,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Search documentation", @@ -16211,6 +19549,24 @@ } }, "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List the account's email domains + plan capabilities", @@ -16259,6 +19615,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Add + provision an email domain", @@ -16269,7 +19643,7 @@ }, "/email-domains/use-shared-domain": { "post": { - "description": "Clear the account's primary domain so agent email reverts to the shared `agent.seclai.com` sending/inbound scheme, WITHOUT removing the configured domain(s) \u2014 they stay verified and can be promoted again later. Owner/admin only.\n\nAuth & scoping: requires an `X-API-Key` header or OAuth Bearer token bound to a **user** (an account-only key is refused with 403); the domain is scoped to the key's account.", + "description": "Clear the account's primary domain so agent email reverts to the shared `agent.seclai.com` sending domain, WITHOUT removing the configured domain(s) \u2014 they stay verified and can be promoted again later. Owner/admin only.\n\nAuth & scoping: requires an `X-API-Key` header or OAuth Bearer token bound to a **user** (an account-only key is refused with 403); the domain is scoped to the key's account.", "operationId": "use_shared_domain_api_api_email_domains_use_shared_domain_post", "parameters": [ { @@ -16282,6 +19656,24 @@ "responses": { "204": { "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Revert to the shared agent.seclai.com sending domain", @@ -16332,6 +19724,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Remove an email domain", @@ -16402,6 +19812,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "DMARC aggregate-report summary for a domain", @@ -16412,7 +19840,7 @@ }, "/email-domains/{domain_id}/primary": { "post": { - "description": "Promote a verified domain to the account's primary domain \u2014 agent email then sends FROM and receives ON this domain (`@`, `@`) instead of the shared `agent.seclai.com`. The domain must be verified. Owner/admin only.\n\nAuth & scoping: requires an `X-API-Key` header or OAuth Bearer token bound to a **user** (an account-only key is refused with 403); the domain is scoped to the key's account.", + "description": "Promote a verified domain to the account's primary domain \u2014 agent email then sends FROM this domain and shows its addresses on it (`@`, `@`) instead of the shared `agent.seclai.com`; addresses keep resolving on the account's other verified domains and the shared form. The domain must be verified. Owner/admin only.\n\nAuth & scoping: requires an `X-API-Key` header or OAuth Bearer token bound to a **user** (an account-only key is refused with 403); the domain is scoped to the key's account.", "operationId": "set_primary_email_domain_api_api_email_domains__domain_id__primary_post", "parameters": [ { @@ -16452,9 +19880,27 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Make a verified domain the account's primary sending/inbound domain", + "summary": "Make a verified domain the account's primary sending domain", "tags": [ "email-domains" ] @@ -16502,6 +19948,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Send a test email from a verified domain to the account owner", @@ -16552,6 +20016,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Run a verification check immediately ('Check now')", @@ -16608,6 +20090,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Generate a governance plan", @@ -16669,6 +20169,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List AI assistant conversations", @@ -16725,6 +20243,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Accept a governance plan", @@ -16772,8 +20308,26 @@ "$ref": "#/components/schemas/HTTPValidationError" } } - }, - "description": "Validation Error" + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Decline a governance plan", @@ -16866,6 +20420,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List Knowledge Bases", @@ -16917,6 +20489,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Create Knowledge Base", @@ -16959,6 +20549,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete Knowledge Base", @@ -17006,6 +20614,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Knowledge Base", @@ -17063,6 +20689,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Update Knowledge Base", @@ -17093,6 +20737,24 @@ } }, "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get current user identity", @@ -17203,6 +20865,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List Memory Banks", @@ -17251,6 +20931,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Create Memory Bank", @@ -17304,6 +21002,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Generate a memory bank configuration", @@ -17371,6 +21087,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Fetch memory bank AI conversation history", @@ -17431,6 +21165,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Accept or decline a memory bank AI suggestion", @@ -17461,6 +21213,24 @@ } }, "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List Templates", @@ -17511,6 +21281,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Test Compaction Prompt Standalone", @@ -17553,6 +21341,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete Memory Bank", @@ -17600,6 +21406,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Memory Bank", @@ -17657,6 +21481,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Update Memory Bank", @@ -17706,6 +21548,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Agents Using Bank", @@ -17716,7 +21576,7 @@ }, "/memory_banks/{memory_bank_id}/compact": { "post": { - "description": "Trigger an on-demand compaction run for a memory bank.\n\nThe bank must have at least one compaction threshold configured (max_age_days, max_turns, or max_size_tokens). Compaction runs asynchronously \u2014 the response confirms scheduling, not completion.", + "description": "Trigger an on-demand compaction run for a memory bank.\n\nThe bank must have at least one compaction threshold configured (max_turns or max_size_tokens). Age no longer triggers compaction \u2014 use retention_days to remove entries by age. Compaction runs asynchronously \u2014 the response confirms scheduling, not completion.", "operationId": "compact_memory_bank_api_memory_banks__memory_bank_id__compact_post", "parameters": [ { @@ -17755,6 +21615,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Compact Memory Bank", @@ -17797,6 +21675,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete Memory Bank Source", @@ -17894,6 +21790,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Memory Bank Entry Stats", @@ -17951,8 +21865,26 @@ "$ref": "#/components/schemas/HTTPValidationError" } } - }, - "description": "Validation Error" + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Test Compaction Prompt", @@ -17963,7 +21895,7 @@ }, "/models": { "get": { - "description": "List all enabled LLM models with full details.\n\nReturns models grouped by provider, including capabilities, credit pricing, tool support, variant tiers, and lifecycle status.\n\nOptional query parameters:\n- `provider`: filter by provider (e.g. 'anthropic', 'openai')\n- `supports_tool_use`: filter to models with tool calling support\n- `supports_thinking`: filter to models with extended thinking support\n- `supports_input_media`: filter to models accepting an input modality (`image`/`audio`/`video`/`pdf` or a full MIME)\n- `supports_output_media`: filter to models producing an output modality (`image`/`audio`/`video`) \u2014 e.g. to find generation models\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "description": "List the enabled LLM models with full details.\n\nReturns models grouped by provider, including capabilities, credit pricing, tool support, variant tiers, and lifecycle status.\n\nA model whose credit rate has not been published yet is omitted, so you are never offered a model that cannot be billed and therefore cannot be run. Such a model may appear later without any other change.\n\nOptional query parameters:\n- `provider`: filter by provider (e.g. 'anthropic', 'openai')\n- `supports_tool_use`: filter to models with tool calling support\n- `supports_thinking`: filter to models with extended thinking support\n- `supports_input_media`: filter to models accepting an input modality (`image`/`audio`/`video`/`pdf` or a full MIME)\n- `supports_output_media`: filter to models producing an output modality (`image`/`audio`/`video`) \u2014 e.g. to find generation models\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", "operationId": "list_models_api_models_get", "parameters": [ { @@ -18087,6 +22019,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List Models", @@ -18184,6 +22134,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List Alerts", @@ -18207,6 +22175,24 @@ "responses": { "204": { "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Mark All Read", @@ -18237,6 +22223,24 @@ } }, "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Alert Unread Count", @@ -18280,6 +22284,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Mark Read", @@ -18288,6 +22310,82 @@ ] } }, + "/models/embedders": { + "get": { + "description": "List the embedding models a source can be created with.\n\nEach entry carries the `model_type` to pass as `embedding_model` when creating a source, the `dimensions` it supports, and \u2014 most importantly for multi-modal indexing \u2014 `supported_input_media`: the modalities that embedder can actually index. A source only honours a `media_types` entry its embedder lists here; unsupported kinds are dropped at save time with an `embedder_warning`, so check this before choosing an embedder for a knowledge base of images or video.\n\nText-only embedders report `supported_input_media` as null. Pricing is reported as `credits` (per ~1,000 English words of text) plus `per_modality_rates` for the non-text modalities a multi-modal embedder bills differently.\n\nAn embedder whose credit rate has not been published yet is omitted, so you are never offered one that cannot be billed.\n\nOptional query parameters:\n- `supports_input_media`: keep only embedders that can index this modality (`text`/`image`/`video`/`audio` or a full MIME)\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The catalog is global reference data, identical for every account.", + "operationId": "list_embedding_models_api_models_embedders_get", + "parameters": [ + { + "description": "Filter to embedders that can index this input modality \u2014 a coarse kind (text, image, video, audio) or a full MIME.", + "in": "query", + "name": "supports_input_media", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to embedders that can index this input modality \u2014 a coarse kind (text, image, video, audio) or a full MIME.", + "title": "Supports Input Media" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EmbeddingModelListResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "List Embedding Models", + "tags": [ + "models" + ] + } + }, "/models/generation-tiers": { "get": { "description": "List the media-generation quality tiers and the model + cost each resolves to.\n\nOn a prompt_call's `media_generation` tool \u2014 and the dedicated generate_* steps via tier routing \u2014 the author/LLM chooses a *tier* (fast/balanced/thorough), never a model. This is the surface that maps each `(modality, tier)` to its concrete generator, raw `credits_per_unit`, `unit_label`, and a human-readable scaled `price_label`. Global routing/pricing (the same for every account); read-only. REST parity with the `list_generation_tiers` MCP tool.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", @@ -18310,6 +22408,24 @@ } }, "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Generation Tiers", @@ -18320,7 +22436,7 @@ }, "/models/playground/experiments": { "get": { - "description": "List model playground experiments for the account.\n\nReturns a paginated, time-filtered list of experiments ordered by creation date descending.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Experiments are scoped to the caller's account.", + "description": "List model playground experiments for the account.\n\nReturns a paginated, time-filtered list of experiments ordered by creation date descending.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. Experiments are scoped to the caller's account and, when the credential is bound to a user, to that user.", "operationId": "list_experiments_api_models_playground_experiments_get", "parameters": [ { @@ -18429,6 +22545,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List Experiments", @@ -18437,7 +22571,7 @@ ] }, "post": { - "description": "Create and schedule a model playground experiment.\n\nRuns the given prompt against 1-10 models in parallel and optionally evaluates the outputs with an LLM judge.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", + "description": "Create and schedule a model playground experiment.\n\nRuns the given prompt against 1-10 models in parallel and optionally evaluates the outputs with an LLM judge.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.\n- When the credential is bound to a user, the experiment belongs to that user; only that user or an account-scoped key can cancel or delete it.", "operationId": "create_experiment_api_models_playground_experiments_post", "parameters": [ { @@ -18477,6 +22611,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Create Experiment", @@ -18487,7 +22639,7 @@ }, "/models/playground/experiments/{experiment_id}": { "delete": { - "description": "Soft-delete a model playground experiment.\n\nRemoves the experiment from list/detail views while preserving audit history.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth access token. The experiment must belong to the caller's account.", + "description": "Soft-delete a model playground experiment.\n\nRemoves the experiment from list/detail views while preserving audit history.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth access token. The experiment must belong to the caller's account and, when the credential is bound to a user, to that user; otherwise 404.", "operationId": "delete_experiment_endpoint_api_models_playground_experiments__experiment_id__delete", "parameters": [ { @@ -18520,6 +22672,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete Experiment Endpoint", @@ -18528,7 +22698,7 @@ ] }, "get": { - "description": "Get details and results for a specific model playground experiment.\n\nReturns the full experiment payload including prompt, model outputs, and evaluation results (if available).\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account.", + "description": "Get details and results for a specific model playground experiment.\n\nReturns the full experiment payload including prompt, model outputs, and evaluation results (if available).\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account and, when the credential is bound to a user, to that user; otherwise 404.", "operationId": "get_experiment_api_models_playground_experiments__experiment_id__get", "parameters": [ { @@ -18568,6 +22738,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Experiment", @@ -18578,7 +22766,7 @@ }, "/models/playground/experiments/{experiment_id}/cancel": { "post": { - "description": "Cancel a running or pending model playground experiment.\n\nSignals running model calls to abort and marks the experiment as canceled.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account.", + "description": "Cancel a running or pending model playground experiment.\n\nSignals running model calls to abort and marks the experiment as canceled.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account and, when the credential is bound to a user, to that user; otherwise 404.", "operationId": "cancel_experiment_endpoint_api_models_playground_experiments__experiment_id__cancel_post", "parameters": [ { @@ -18618,6 +22806,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Cancel Experiment Endpoint", @@ -18626,6 +22832,54 @@ ] } }, + "/models/rerankers": { + "get": { + "description": "List the reranker models a knowledge base can be created with.\n\nA reranker re-scores the top results of a vector search for relevance. Each entry carries the `model_type` to pass as `reranker_model` on a knowledge base, its `credits_per_action`, and whether it is the platform default (`is_default`, used when you omit `reranker_model`).\n\nTo disable reranking, send `\"none\"` or an empty string as `reranker_model` rather than a value from this list. Reranking scores text, so a knowledge base whose sources all embed media natively \u2014 whose chunks carry no text \u2014 defaults to no reranker.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. The catalog is global reference data, identical for every account.", + "operationId": "list_reranker_models_api_models_rerankers_get", + "parameters": [ + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RerankerModelListResponse" + } + } + }, + "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "List Reranker Models", + "tags": [ + "models" + ] + } + }, "/models/{model_id}/details": { "get": { "description": "Get detailed information about a specific model.\n\nReturns full model details including capabilities, credit pricing, tool support, variant tiers, and lifecycle status.\n\nThe `model_id` is the model enum identifier (e.g. 'anthropic_claude_opus_4_6').\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.", @@ -18667,6 +22921,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Model", @@ -18801,11 +23073,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Recommendations", @@ -18891,6 +23181,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Search resources", @@ -19003,6 +23311,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List solutions", @@ -19051,6 +23377,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Create a solution", @@ -19094,6 +23438,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete a solution", @@ -19142,6 +23504,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get a solution", @@ -19200,6 +23580,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Update a solution", @@ -19260,6 +23658,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Unlink agents", @@ -19318,6 +23734,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Link agents", @@ -19378,6 +23812,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Generate solution plan", @@ -19438,6 +23890,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Generate knowledge base plan", @@ -19498,6 +23968,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Generate source plan", @@ -19568,6 +24056,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Accept plan", @@ -19621,6 +24127,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Decline plan", @@ -19675,6 +24199,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List conversations", @@ -19733,6 +24275,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Add conversation turn", @@ -19796,6 +24356,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Mark conversation turn", @@ -19856,6 +24434,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Unlink knowledge bases", @@ -19914,6 +24510,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Link knowledge bases", @@ -19974,6 +24588,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Unlink source connections", @@ -20032,6 +24664,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Link source connections", @@ -20137,11 +24787,29 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" } } }, - "description": "Validation Error" + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List sources", @@ -20193,6 +24861,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Create Source", @@ -20236,6 +24922,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete Source", @@ -20284,6 +24988,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Source", @@ -20292,7 +25014,7 @@ ] }, "post": { - "description": "Upload a small text payload to a content source (no multipart/form-data required).\n\n**Maximum payload size:** 8192 bytes (UTF-8).\n\n**Supported content types:**\n- `application/json`\n- `application/xml`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n\nNotes:\n- Use this endpoint for small text payloads; larger files should use `/upload`.\n- `title` is merged into `metadata.title` when not already present.", + "description": "Upload a small text payload to a content source (no multipart/form-data required).\n\n**Maximum payload size:** 8192 bytes (UTF-8).\n\n**Supported content types:**\n- `application/json`\n- `application/xml`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n\nNotes:\n- A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected.\n- Use this endpoint for small text payloads; larger files should use `/upload`.\n- `title` is merged into `metadata.title` when not already present.\n\nTracking indexing progress:\n- **Which id you get back depends on `status`, and they are not interchangeable:**\n - `uploaded` \u2014 a new item. `content_version_id` is set and `source_connection_content_version_id` is `null`. Indexing continues in the background after this call returns.\n - `duplicate` \u2014 this exact file is already on the source, so nothing was created and nothing is being indexed. `content_version_id` is `null` and `source_connection_content_version_id` is the existing, already-indexed item: pass it straight to `GET /contents/{id}`. There is nothing to poll.\n- For an `uploaded` item, poll `GET /sources/{id}/contents/{content_version_id}` with the returned `content_version_id`, or `GET /sources/{id}/contents?content_version_id=\u2026&content_version_id=\u2026` for a whole batch, to follow each item through to `completed` or `failed`.\n- On those status endpoints `source_connection_content_version_id` stays `null` until the item finishes indexing; that is the id `GET /contents/{id}` takes.", "operationId": "upload_inline_text_to_source_api_sources__source_connection_id__post", "parameters": [ { @@ -20300,9 +25022,258 @@ "name": "source_connection_id", "required": true, "schema": { - "format": "uuid", - "title": "Source Connection Id", - "type": "string" + "format": "uuid", + "title": "Source Connection Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InlineTextUploadRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/routers__api__sources__FileUploadResponse" + } + } + }, + "description": "Successful Response" + }, + "403": { + "description": "The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`)." + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Upload inline text to a content source", + "tags": [ + "sources" + ] + }, + "put": { + "description": "Update a content source's configuration. Only provided fields are changed; omitted fields are left unchanged.\n\nSystem-managed sources only allow `retention_days` updates.", + "operationId": "update_source_api_sources__source_connection_id__put", + "parameters": [ + { + "in": "path", + "name": "source_connection_id", + "required": true, + "schema": { + "format": "uuid", + "title": "Source Connection Id", + "type": "string" + } + }, + { + "$ref": "#/components/parameters/X-Account-Id" + }, + { + "$ref": "#/components/parameters/Seclai-Version" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateSourceBody" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SourceResponse" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } + } + }, + "summary": "Update Source", + "tags": [ + "sources" + ] + } + }, + "/sources/{source_connection_id}/contents": { + "get": { + "description": "List every content item this source has attempted to index, with the status of each.\n\nUnlike the source's `content_count`, which only counts finished items, this listing includes items that are still processing and items that failed \u2014 so a bulk upload can report per-item progress and point at the specific items that did not make it.\n\nCorrelating with an upload:\n- Each item is keyed by `content_version_id`, which is what the upload endpoints return. Pass those ids as repeated `content_version_id` query parameters to poll exactly the items you uploaded.\n- `source_connection_content_version_id` is `null` until an item finishes indexing; once set, it is the id `GET /contents/{id}` takes.\n- `content_status` reaches `completed` on success and `failed` on error, with the reason in `error`. The intermediate values are `pending`, `fetching`, `transcribing`, `scanning`, and `indexing`.\n\nParameters:\n- Pagination: `page` and `limit`.\n- Sorting: `sort` (created_at/title/status) and `order` (asc/desc). `created_at` sorts on when the item was uploaded or pulled.\n- Filtering: `status` and repeatable `content_version_id`.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only list content for sources belonging to your account.", + "operationId": "list_source_contents_api_sources__source_connection_id__contents_get", + "parameters": [ + { + "in": "path", + "name": "source_connection_id", + "required": true, + "schema": { + "format": "uuid", + "title": "Source Connection Id", + "type": "string" + } + }, + { + "description": "Page number", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "description": "Page number", + "minimum": 1, + "title": "Page", + "type": "integer" + } + }, + { + "description": "Items per page", + "in": "query", + "name": "limit", + "required": false, + "schema": { + "default": 20, + "description": "Items per page", + "maximum": 100, + "minimum": 1, + "title": "Limit", + "type": "integer" + } + }, + { + "description": "Sort field (created_at/title/status)", + "in": "query", + "name": "sort", + "required": false, + "schema": { + "default": "created_at", + "description": "Sort field (created_at/title/status)", + "title": "Sort", + "type": "string" + } + }, + { + "description": "Sort order", + "in": "query", + "name": "order", + "required": false, + "schema": { + "default": "desc", + "description": "Sort order", + "pattern": "^(asc|desc)$", + "title": "Order", + "type": "string" + } + }, + { + "description": "Filter to one status: pending, fetching, transcribing, scanning, indexing, completed, or failed. Use `failed` to list only the items that could not be indexed.", + "in": "query", + "name": "status", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to one status: pending, fetching, transcribing, scanning, indexing, completed, or failed. Use `failed` to list only the items that could not be indexed.", + "title": "Status" + } + }, + { + "description": "Filter to specific content versions, repeatable. Pass the `content_version_id` values returned by the upload endpoints to poll exactly the items you uploaded in a single request. The ids travel in the query string, so keep a request to about 100: a URL longer than 8,192 bytes is rejected before it reaches the API. The API itself accepts at most 500 \u2014 beyond either limit, split the poll or page through the unfiltered listing.", + "in": "query", + "name": "content_version_id", + "required": false, + "schema": { + "anyOf": [ + { + "items": { + "format": "uuid", + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter to specific content versions, repeatable. Pass the `content_version_id` values returned by the upload endpoints to poll exactly the items you uploaded in a single request. The ids travel in the query string, so keep a request to about 100: a URL longer than 8,192 bytes is rejected before it reaches the API. The API itself accepts at most 500 \u2014 beyond either limit, split the poll or page through the unfiltered listing.", + "title": "Content Version Id" } }, { @@ -20312,22 +25283,12 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InlineTextUploadRequest" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/routers__api__sources__FileUploadResponse" + "$ref": "#/components/schemas/SourceContentStatusListResponse" } } }, @@ -20342,16 +25303,36 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Upload inline text to a content source", + "summary": "List content items and their indexing status", "tags": [ "sources" ] - }, - "put": { - "description": "Update a content source's configuration. Only provided fields are changed; omitted fields are left unchanged.\n\nSystem-managed sources only allow `retention_days` updates.", - "operationId": "update_source_api_sources__source_connection_id__put", + } + }, + "/sources/{source_connection_id}/contents/{content_version_id}": { + "get": { + "description": "Get the indexing status of a single content item, addressed by the `content_version_id` the upload endpoints return.\n\nUse this to follow one uploaded file through indexing. To follow many at once, use `GET /sources/{id}/contents` with repeated `content_version_id` parameters instead of polling this endpoint per item.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token. You can only access content belonging to your account.", + "operationId": "get_source_content_status_endpoint_api_sources__source_connection_id__contents__content_version_id__get", "parameters": [ { "in": "path", @@ -20363,6 +25344,16 @@ "type": "string" } }, + { + "in": "path", + "name": "content_version_id", + "required": true, + "schema": { + "format": "uuid", + "title": "Content Version Id", + "type": "string" + } + }, { "$ref": "#/components/parameters/X-Account-Id" }, @@ -20370,22 +25361,12 @@ "$ref": "#/components/parameters/Seclai-Version" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateSourceBody" - } - } - }, - "required": true - }, "responses": { "200": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SourceResponse" + "$ref": "#/components/schemas/SourceContentStatusResponse" } } }, @@ -20400,9 +25381,27 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, - "summary": "Update Source", + "summary": "Get one content item's indexing status", "tags": [ "sources" ] @@ -20458,6 +25457,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get Source Embedding Migration", @@ -20519,6 +25536,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Start Source Embedding Migration", @@ -20529,7 +25564,7 @@ }, "/sources/{source_connection_id}/embedding-migration/cancel": { "post": { - "description": "Cancel an active embedding migration for a custom-index source.\n\nOnly pending, running, or switching migrations can be cancelled.", + "description": "Cancel an active embedding migration for a custom-index source.\n\nOnly pending and running migrations can be cancelled. A migration that has reached the switching phase is committing its switch-over in a single transaction, so there is no half-applied state to back out of and cancel is refused.", "operationId": "cancel_source_embedding_migration_api_sources__source_connection_id__embedding_migration_cancel_post", "parameters": [ { @@ -20569,6 +25604,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Cancel Source Embedding Migration", @@ -20642,6 +25695,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "List exports", @@ -20650,7 +25721,7 @@ ] }, "post": { - "description": "Start an asynchronous export job. Poll GET .../exports/{export_id} until status becomes completed, then use /download to retrieve the file.", + "description": "Start an asynchronous export job. Poll GET .../exports/{export_id} until status becomes completed, then use /download to retrieve the file. On an organization account, a key bound to a user must belong to an owner or administrator; a viewer's key is refused with 403 `permission_denied`. Personal accounts and account-scoped keys are unaffected.", "operationId": "create_source_export_api_sources__source_connection_id__exports_post", "parameters": [ { @@ -20691,6 +25762,9 @@ }, "description": "Successful Response" }, + "403": { + "description": "The key's user is not an owner or administrator of the organization account (`error.code` is `permission_denied`)." + }, "422": { "content": { "application/json": { @@ -20700,6 +25774,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Create export", @@ -20760,6 +25852,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Estimate export size", @@ -20770,7 +25880,7 @@ }, "/sources/{source_connection_id}/exports/{export_id}": { "delete": { - "description": "Delete an export job and remove the associated file from S3. This is a soft-delete: the database record is retained for audit purposes but the backing file is permanently removed.", + "description": "Delete an export job and remove the associated file from S3. This is a soft-delete: the database record is retained for audit purposes but the backing file is permanently removed. On an organization account, a key bound to a user must belong to an owner or administrator; a viewer's key is refused with 403 `permission_denied`. Personal accounts and account-scoped keys are unaffected.", "operationId": "delete_source_export_api_sources__source_connection_id__exports__export_id__delete", "parameters": [ { @@ -20804,6 +25914,9 @@ "204": { "description": "Successful Response" }, + "403": { + "description": "The key's user is not an owner or administrator of the organization account (`error.code` is `permission_denied`)." + }, "422": { "content": { "application/json": { @@ -20813,6 +25926,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Delete export", @@ -20871,6 +26002,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get export status", @@ -20881,7 +26030,7 @@ }, "/sources/{source_connection_id}/exports/{export_id}/cancel": { "post": { - "description": "Cancel a pending or running export. The background task will stop at the next chunk boundary. Completed, failed, expired, or already-cancelled exports cannot be cancelled.", + "description": "Cancel a pending or running export. The background task will stop at the next chunk boundary. Completed, failed, expired, or already-cancelled exports cannot be cancelled. On an organization account, a key bound to a user must belong to an owner or administrator; a viewer's key is refused with 403 `permission_denied`. Personal accounts and account-scoped keys are unaffected.", "operationId": "cancel_source_export_api_sources__source_connection_id__exports__export_id__cancel_post", "parameters": [ { @@ -20922,6 +26071,9 @@ }, "description": "Successful Response" }, + "403": { + "description": "The key's user is not an owner or administrator of the organization account (`error.code` is `permission_denied`)." + }, "422": { "content": { "application/json": { @@ -20931,6 +26083,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Cancel export", @@ -20989,6 +26159,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Download export", @@ -20999,7 +26187,7 @@ }, "/sources/{source_connection_id}/upload": { "post": { - "description": "Upload a file to a content source.\n\n**Maximum file size:** 209715200 bytes.\n\n**Supported MIME types:**\n- `application/epub+zip`\n- `application/json`\n- `application/pdf`\n- `application/vnd.ms-excel`\n- `application/vnd.ms-outlook`\n- `application/vnd.ms-powerpoint`\n- `application/vnd.openxmlformats-officedocument.presentationml.presentation`\n- `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`\n- `application/vnd.openxmlformats-officedocument.wordprocessingml.document`\n- `application/xml`\n- `application/zip`\n- `audio/flac`\n- `audio/mp4`\n- `audio/mpeg`\n- `audio/ogg`\n- `audio/wav`\n- `image/bmp`\n- `image/gif`\n- `image/jpeg`\n- `image/png`\n- `image/svg+xml`\n- `image/tiff`\n- `image/webp`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n- `video/mp4`\n- `video/quicktime`\n- `video/x-msvideo`\n\nNotes:\n- If the uploaded file's content type is `application/octet-stream`, the server attempts to infer the type from the file extension.\n- Use `metadata` to attach an arbitrary JSON object of metadata (for example `metadata={\"author\":\"Ada\",\"category\":\"docs\"}`).\n- `title` is a convenience field and is merged into the metadata as `metadata.title` (it does not override an existing `metadata.title`).\n- For backwards compatibility, you can also pass form fields named `metadata_` (for example `metadata_author=...`). These override keys from `metadata`.\n\nResponse:\n- `status` is `uploaded` for a new upload, or `duplicate` when the same file already exists for this source.", + "description": "Upload a file to a content source.\n\n**Maximum file size:** 209715200 bytes, except `image/svg+xml` at 5242880 bytes (SVG is sanitized before it is stored).\n\n**Supported MIME types:**\n- `application/epub+zip`\n- `application/json`\n- `application/pdf`\n- `application/vnd.ms-excel`\n- `application/vnd.ms-outlook`\n- `application/vnd.ms-powerpoint`\n- `application/vnd.openxmlformats-officedocument.presentationml.presentation`\n- `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`\n- `application/vnd.openxmlformats-officedocument.wordprocessingml.document`\n- `application/xml`\n- `application/zip`\n- `audio/flac`\n- `audio/mp4`\n- `audio/mpeg`\n- `audio/ogg`\n- `audio/wav`\n- `image/bmp`\n- `image/gif`\n- `image/jpeg`\n- `image/png`\n- `image/svg+xml`\n- `image/tiff`\n- `image/webp`\n- `text/csv`\n- `text/html`\n- `text/markdown`\n- `text/plain`\n- `text/x-markdown`\n- `text/xml`\n- `video/mp4`\n- `video/quicktime`\n- `video/x-msvideo`\n\nNotes:\n- A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected.\n- If the uploaded file's content type is `application/octet-stream`, the server attempts to infer the type from the file extension.\n- Use `metadata` to attach an arbitrary JSON object of metadata (for example `metadata={\"author\":\"Ada\",\"category\":\"docs\"}`).\n- `title` is a convenience field and is merged into the metadata as `metadata.title` (it does not override an existing `metadata.title`).\n- For backwards compatibility, you can also pass form fields named `metadata_` (for example `metadata_author=...`). These override keys from `metadata`.\n\nResponse:\n- `status` is `uploaded` for a new upload, or `duplicate` when the same file already exists for this source.\n\nTracking indexing progress:\n- **Which id you get back depends on `status`, and they are not interchangeable:**\n - `uploaded` \u2014 a new item. `content_version_id` is set and `source_connection_content_version_id` is `null`. Indexing continues in the background after this call returns.\n - `duplicate` \u2014 this exact file is already on the source, so nothing was created and nothing is being indexed. `content_version_id` is `null` and `source_connection_content_version_id` is the existing, already-indexed item: pass it straight to `GET /contents/{id}`. There is nothing to poll.\n- For an `uploaded` item, poll `GET /sources/{id}/contents/{content_version_id}` with the returned `content_version_id`, or `GET /sources/{id}/contents?content_version_id=\u2026&content_version_id=\u2026` for a whole batch, to follow each item through to `completed` or `failed`.\n- On those status endpoints `source_connection_content_version_id` stays `null` until the item finishes indexing; that is the id `GET /contents/{id}` takes.", "operationId": "upload_file_to_source_api_sources__source_connection_id__upload_post", "parameters": [ { @@ -21039,6 +26227,9 @@ }, "description": "Successful Response" }, + "403": { + "description": "The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`)." + }, "422": { "content": { "application/json": { @@ -21048,6 +26239,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Upload a file to a content source", @@ -21058,7 +26267,7 @@ }, "/v2/agent-runs/{run_id}/attachments/{attachment_id}": { "get": { - "description": "Streams the bytes of an attachment emitted by a step in the given agent run. ``attachment_id`` is the URL-safe-base64-encoded ``storage_key`` (use the encoder shared by webhook + email payload builders).\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.\n- The calling account must own ``run_id``; lookup failures (missing run, cross-account run, soft-deleted agent, unreferenced storage_key) all collapse to a single 404 to prevent cross-tenant existence enumeration.\n\nMIME handling:\n- Inline-safe MIMEs (image/*, audio/*, video/*, application/pdf, text/plain, application/vnd.seclai.manifest+json) are served with their declared type.\n- Everything else is served as ``application/octet-stream`` with an attachment disposition to prevent stored-XSS.", + "description": "Streams the bytes of an attachment emitted by a step in the given agent run. ``attachment_id`` is the ``id`` of an entry in the run's or a step's ``attachments``, or the URL-safe-base64-encoded storage key, which webhook and email links carry.\n\nAuth & scoping:\n- Requires `X-API-Key` header or OAuth Bearer token.\n- The calling account must own ``run_id``; lookup failures (missing run, cross-account run, soft-deleted agent, a run whose trace was purged, a file not in the run) all collapse to a single 404 to prevent cross-tenant existence enumeration.\n\nMIME handling:\n- Inline-safe MIMEs (image/*, audio/*, video/*, application/pdf, text/plain, application/vnd.seclai.manifest+json) are served with their declared type.\n- Everything else is served as ``application/octet-stream`` with an attachment disposition to prevent stored-XSS.", "operationId": "serve_agent_run_attachment_api_v2_agent_runs__run_id__attachments__attachment_id__get", "parameters": [ { @@ -21161,6 +26370,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Download an agent-run attachment", @@ -21191,6 +26418,24 @@ } }, "description": "Successful Response" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Get the account's API version", @@ -21239,6 +26484,24 @@ } }, "description": "Validation Error" + }, + "503": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceUnavailableError" + } + } + }, + "description": "A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator.", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying. Sent only with `database_unavailable`.", + "schema": { + "type": "integer" + } + } + } } }, "summary": "Pin (or clear) the account's API version", @@ -21260,8 +26523,13 @@ "default": "2026-07-01", "known": [ "2026-07-01", - "2026-07-27" + "2026-07-27", + "2026-08-03", + "2026-08-21", + "2026-09-28", + "2026-09-30", + "2026-10-03" ], - "latest": "2026-07-27" + "latest": "2026-10-03" } } diff --git a/src/client.ts b/src/client.ts index 7acb7c1..3b67f62 100644 --- a/src/client.ts +++ b/src/client.ts @@ -36,6 +36,16 @@ import type { AgentRunResponse, AgentRunStreamRequest, AgentSummaryResponse, + AgentUsingCloudDriveResponse, + CloudDriveProviderResponse, + CloudDriveRejectionResponse, + CloudDriveResponse, + CloudDriveUpdateRequest, + EmbeddingModelListResponse, + ListSourceContentsOptions, + RerankerModelListResponse, + SourceContentStatusListResponse, + SourceContentStatusResponse, AgentTraceSearchRequest, AgentTraceSearchResponse, AiAssistantAcceptRequest, @@ -256,12 +266,46 @@ function buildURL(baseUrl: string, path: string, query?: Record if (query) { for (const [key, value] of Object.entries(query)) { if (value === undefined || value === null) continue; + if (Array.isArray(value)) { + // A repeatable parameter: one `key=value` pair per element. + for (const item of value) url.searchParams.append(key, String(item)); + continue; + } url.searchParams.set(key, String(value)); } } return url; } +/** + * One page as a fetcher handed to {@link Seclai.paginate} may return it: a list + * method's `{data, pagination}` envelope or flat `{data, total, page, limit}`, + * a bare array, or `{items, pagination}` with a `total_pages` count. + */ +export type PaginatedPage = + | T[] + | { + data?: T[] | null; + pagination?: { pages?: number; has_next?: boolean } | null; + total?: number; + limit?: number; + } + | { items: T[]; pagination?: { page: number; total_pages: number } }; + +/** The items of a list that is a bare array by default and `{data, pagination}` from 2026-07-27. */ +function listItems(res: unknown): T[] { + if (Array.isArray(res)) return res as T[]; + return (res as { data?: T[] | null } | null)?.data ?? []; +} + +/** Restore `models` on a model listing, which arrives under `data` from 2026-07-27. */ +function withModels(res: unknown): T { + const body = res as T & { data?: T["models"] }; + return Array.isArray(body.models) || !Array.isArray(body.data) + ? body + : { ...body, models: body.data }; +} + async function safeText(response: Response): Promise { try { return await response.clone().text(); @@ -392,7 +436,7 @@ function inferMimeType(fileName: string | undefined): string | undefined { * const client = new Seclai({ apiKey: "sk-..." }); * * // List agents - * const { items } = await client.listAgents(); + * const { data: agents } = await client.listAgents(); * * // Run an agent * const run = await client.runAgent("agent-id", { input: "Hello!" }); @@ -2159,6 +2203,60 @@ export class Seclai { return (await this.request("POST", `/sources/${sourceId}`, { json: body })) as FileUploadResponse; } + /** + * List a source's content items and their indexing status. + * + * @param sourceId - Source connection identifier. + * @param opts - Pagination, sorting, and filters. Pass the `content_version_id` + * values the upload methods return as `contentVersionIds` to poll a batch of + * uploads in one request — about 100 at a time, since the ids travel in the + * query string and a URL over 8,192 bytes is rejected with a 414. An empty + * `contentVersionIds` matches nothing, so it returns an empty page without + * sending a request. + * @returns The items under `data` with `pagination`, on every API version. + */ + async listSourceContents( + sourceId: string, + opts: ListSourceContentsOptions = {}, + ): Promise { + if (opts.contentVersionIds?.length === 0) { + return { + data: [], + pagination: { + page: opts.page ?? 1, + limit: opts.limit ?? 20, + total: 0, + pages: 0, + has_next: false, + has_prev: false, + }, + }; + } + return (await this.request("GET", `/sources/${sourceId}/contents`, { + query: { + page: opts.page, + limit: opts.limit, + sort: opts.sort, + order: opts.order, + status: opts.status, + content_version_id: opts.contentVersionIds, + }, + })) as SourceContentStatusListResponse; + } + + /** + * Get one content item's indexing status. + * + * @param sourceId - Source connection identifier. + * @param contentVersionId - The `content_version_id` an upload returned. + */ + async getSourceContentStatus(sourceId: string, contentVersionId: string): Promise { + return (await this.request( + "GET", + `/sources/${sourceId}/contents/${contentVersionId}`, + )) as SourceContentStatusResponse; + } + // ─── Source Exports ──────────────────────────────────────────────────────── /** @@ -2859,6 +2957,33 @@ export class Seclai { return (await this.request("GET", "/models/generation-tiers")) as Record; } + /** + * List the embedding models a source can index with, and their pricing. + * + * The endpoint lists the embedders under `models` by default and under `data` + * once the caller opts in with `apiVersion` 2026-07-27 or later; `models` is + * populated on either, with the defaults and pricing beside it. + * + * @param opts.supportsInputMedia - Keep only embedders that can index this + * input modality — a coarse kind (text, image, video, audio) or a full MIME. + */ + async listEmbeddingModels(opts: { supportsInputMedia?: string } = {}): Promise { + return withModels( + await this.request("GET", "/models/embedders", { + query: { supports_input_media: opts.supportsInputMedia }, + }), + ); + } + + /** + * List the reranker models a knowledge base can use, and their pricing. + * + * `models` is populated on either wire shape, as for {@link Seclai.listEmbeddingModels}. + */ + async listRerankerModels(): Promise { + return withModels(await this.request("GET", "/models/rerankers")); + } + // ═══════════════════════════════════════════════════════════════════════════ // Model Playground Experiments // ═══════════════════════════════════════════════════════════════════════════ @@ -2913,6 +3038,100 @@ export class Seclai { await this.request("DELETE", `/models/playground/experiments/${experimentId}`); } + // ═══════════════════════════════════════════════════════════════════════════ + // Cloud Drives + // ═══════════════════════════════════════════════════════════════════════════ + + /** + * List the cloud-drive providers this deployment has configured. + * + * @returns The providers, read from either wire shape. + */ + async listCloudDriveProviders(): Promise { + return listItems(await this.request("GET", "/cloud-drives/providers")); + } + + /** + * List the account's cloud-drive connections. + * + * @returns The connections, read from either wire shape. + */ + async listCloudDrives(): Promise { + return listItems(await this.request("GET", "/cloud-drives")); + } + + /** + * Get a cloud-drive connection. + * + * @param connectionId - Cloud-drive connection identifier. + */ + async getCloudDrive(connectionId: string): Promise { + return (await this.request("GET", `/cloud-drives/${connectionId}`)) as CloudDriveResponse; + } + + /** + * Update a cloud-drive connection. + * + * @param connectionId - Cloud-drive connection identifier. + * @param body - Fields to change — `name` and/or `folder_path`. + * @returns The updated connection. + */ + async updateCloudDrive(connectionId: string, body: CloudDriveUpdateRequest): Promise { + return (await this.request("PATCH", `/cloud-drives/${connectionId}`, { json: body })) as CloudDriveResponse; + } + + /** + * Disconnect a cloud-drive connection, keeping the connection itself. + * + * @param connectionId - Cloud-drive connection identifier. + * @returns The connection in its disconnected state. + */ + async disconnectCloudDrive(connectionId: string): Promise { + return (await this.request("POST", `/cloud-drives/${connectionId}/disconnect`)) as CloudDriveResponse; + } + + /** + * Delete a cloud-drive connection. + * + * @param connectionId - Cloud-drive connection identifier. + */ + async deleteCloudDrive(connectionId: string): Promise { + await this.request("DELETE", `/cloud-drives/${connectionId}`); + } + + /** + * List the agents that use a cloud-drive connection. + * + * @param connectionId - Cloud-drive connection identifier. + * @returns The agents, read from either wire shape. + */ + async getAgentsUsingCloudDrive(connectionId: string): Promise { + return listItems( + await this.request("GET", `/cloud-drives/${connectionId}/agents`), + ); + } + + /** + * List the files a cloud-drive connection skipped, newest first. + * + * A skipped file fires no trigger, so this is where to look when an agent + * did not run for a file. + * + * @param connectionId - Cloud-drive connection identifier. + * @param opts.limit - Maximum number of rejections (1-200, default 50). + * @returns The rejections with their reasons, read from either wire shape. + */ + async listCloudDriveRejections( + connectionId: string, + opts: { limit?: number } = {}, + ): Promise { + return listItems( + await this.request("GET", `/cloud-drives/${connectionId}/rejections`, { + query: { limit: opts.limit }, + }), + ); + } + // ═══════════════════════════════════════════════════════════════════════════ // Search // ═══════════════════════════════════════════════════════════════════════════ @@ -3178,40 +3397,64 @@ export class Seclai { /** * Auto-paginate through a list endpoint. * - * Yields individual items from each page, automatically fetching the next page - * until all items have been returned. + * Yields individual items from each page, fetching the next page until the + * response reports there is none. A fetcher that answers with a bare array has + * no further pages, so its items are yielded once. * * @param fetchPage - A function that fetches a single page given `{ page, limit }`. * @param opts - Page size (default: 50). + * @throws {@link SeclaiError} When a page carries its items under neither `data` nor `items`. * * @example * ```ts * for await (const agent of client.paginate( * (opts) => client.listAgents(opts), * )) { - * console.log(agent); + * console.log(agent.name); * } * ``` */ async *paginate( - fetchPage: (opts: { page: number; limit: number }) => Promise<{ items: T[]; pagination?: { page: number; total_pages: number } }>, + fetchPage: (opts: { page: number; limit: number }) => Promise>, opts?: { limit?: number }, ): AsyncGenerator { const limit = opts?.limit ?? 50; let page = 1; while (true) { - const result = await fetchPage({ page, limit }); - for (const item of result.items) { - yield item; + const result = (await fetchPage({ page, limit })) as unknown; + if (Array.isArray(result)) { + yield* result as T[]; + return; } - - if ( - !result.pagination || - result.items.length < limit || - page >= result.pagination.total_pages - ) { - break; + const body = (result ?? {}) as { + data?: T[] | null; + items?: T[] | null; + pagination?: { pages?: number; total_pages?: number; has_next?: boolean } | null; + total?: number; + limit?: number; + }; + const items = "data" in body ? body.data ?? [] : body.items; + if (!Array.isArray(items)) { + throw new SeclaiError( + "paginate() could not find the page's items: expected an array, or an object with a `data` or `items` array.", + ); + } + yield* items; + + const pagination = body.pagination; + if (items.length === 0) return; + if (!pagination) { + // The flat `{data, total, page, limit}` shape. Counted from the page + // requested, so a server that ignores `page` cannot loop this forever. + if (typeof body.total !== "number") return; + const pageSize = typeof body.limit === "number" && body.limit > 0 ? body.limit : limit; + if (page * pageSize >= body.total) return; + } else if (typeof pagination.has_next === "boolean") { + if (!pagination.has_next) return; + } else { + const pages = pagination.pages ?? pagination.total_pages; + if (items.length < limit || pages === undefined || page >= pages) return; } page++; } diff --git a/src/index.ts b/src/index.ts index 436feea..25d2014 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,7 @@ * @see {@link Seclai} for the main client class. * @packageDocumentation */ +export type { PaginatedPage } from "./client"; export { SeclaiApiVersion } from "./versions"; export type { ApiVersion } from "./versions"; @@ -115,6 +116,7 @@ export type { AgentRunListResponse, AgentRunStepResponse, AgentRunAttemptResponse, + AgentRunFileResponse, AgentRunToolCallResponse, AgentTraceSearchRequest, AgentTraceSearchResponse, @@ -210,6 +212,18 @@ export type { FileUploadResponse, InlineTextUploadRequest, InlineTextReplaceRequest, + SourceContentStatusResponse, + SourceContentStatusListResponse, + ListSourceContentsOptions, + + // Cloud Drives + CloudDriveProviderResponse, + CloudDriveScopeResponse, + CloudDriveAccessLevelResponse, + CloudDriveResponse, + CloudDriveUpdateRequest, + AgentUsingCloudDriveResponse, + CloudDriveRejectionResponse, // Source Exports ExportListResponse, @@ -279,6 +293,13 @@ export type { PromptModelResponse, PromptToolResponse, ModalityRateResponse, + EffortOptionsResponse, + EmbeddingModelResponse, + EmbeddingModelListResponse, + EmbeddingModalityRateResponse, + EmbeddingStorageCreditsResponse, + RerankerModelResponse, + RerankerModelListResponse, VariantCategoryResponse, VariantOptionResponse, PlaygroundCreateRequest, diff --git a/src/openapi.ts b/src/openapi.ts index 68b41a0..1d6bbe6 100644 --- a/src/openapi.ts +++ b/src/openapi.ts @@ -362,7 +362,7 @@ export interface paths { put?: never; /** * Cancel all queued inbound-email runs - * @description Fail all of the account's QUEUED (over-quota parked) inbound-email runs at once. A queued run consumed no quota or credits at queue time, so this merely fails them. Returns the count cancelled. + * @description Fail all of the account's QUEUED (over-quota parked) inbound-email runs at once. A queued run has consumed no quota, so this merely fails them. Returns the count cancelled. * * Auth & scoping: requires `X-API-Key` header or OAuth Bearer token for an account owner/admin; scoped to the key's account. */ @@ -408,6 +408,8 @@ export interface paths { * Preview an agent_definition import * @description Validate an `agent_definition` payload (the same shape produced by `GET /agents/{agent_id}/export`) without creating or modifying any agent. On success returns a summary the client can show before commit (counts of steps, schedules, alert configs, evaluation criteria, governance policies). On failure returns the same 422 body shape used by `POST /agents` and `PUT /agents/{id}` so callers can render line/column-anchored errors. * + * Coverage: everything decidable from the payload itself — schema, step ids, nesting depth, text lengths, attachment references, prompt-tool declarations, step-graph cycles, racing step references, and `for_each` aggregation. Rules that depend on account state (email recipients, memory-bank types, cloud-drive connections, the agent's own trigger) can only run at save time, so `POST /agents` may still reject a payload this endpoint accepts. + * * Auth & scoping: * - Requires `X-API-Key` header or OAuth Bearer token. No DB writes. */ @@ -469,7 +471,7 @@ export interface paths { * Cancel an agent run * @description Cancel an in-flight (`processing`) or queued (`queued`) agent run. * - * A `queued` run is an inbound-email run parked by the per-plan rate quota that has not yet been dispatched; cancelling it consumes no quota or credits. + * A `queued` run is an inbound-email run parked by the per-plan rate quota that has not yet been dispatched; it has consumed no quota. * * If the run is already in a terminal state (`completed` or `failed`), cancellation will be rejected. * @@ -706,7 +708,7 @@ export interface paths { * - `write_content_attachment`: Write a file-backed attachment to content (optionally indexed for retrieval; content-triggered agents only. Fields: `attachment_key`, `content`, `content_type`, `indexed`) * - `load_content_attachment`: Load a previously written attachment (content-triggered agents only. Fields: `attachment_key`) * - `load_content`: Load the full text body of a source document (typically used with content-triggered agents; can also load by explicit `content_version_id`. Fields: `content_version_id` optional) - * - `streaming_result`: Stream LLM tokens in real-time via SSE (must be a direct child of `prompt_call`; requires `dynamic_input` or `template_input` trigger; `priority: true` enables real-time streaming) + * - `streaming_result`: Stream LLM tokens in real-time via SSE (must be a direct child of `prompt_call`; requires `dynamic_input` or `template_input` trigger; `priority: true` enables real-time streaming). To stream **and** return a schema-validated payload, add a sibling branch `extract_content` (`expected_format: "json"` + `json_schema`) → `display_result` under the same `prompt_call` — a `display_result` takes precedence over the stream regardless of which finishes first, so its validated output becomes the run's result while the tokens act as a progress channel * - `display_result`: Show output to the user * - `join`: Merge parallel branches * - `merge`: Combine multiple inputs into a single templated output @@ -843,8 +845,8 @@ export interface paths { * @description Run an ephemeral evaluation against provided step output without persisting results. * * Use this to interactively test evaluation prompts and expectation - * configurations while editing criteria. No credits are consumed because - * the result is not recorded. + * configurations while editing criteria. The evaluation is a billed LLM + * call; only its result goes unrecorded. */ post: operations["test_draft_evaluation_api_agents__agent_id__evaluation_criteria_test_draft_post"]; delete?: never; @@ -912,7 +914,7 @@ export interface paths { * The response contains the full definition, trigger configuration with schedules, alert configs, evaluation criteria, agent-scoped governance policies, and a resolved dependency manifest that maps every referenced external entity UUID to its human-readable name. * * Response shape: - * - `export_version`: schema version (currently `"2"`) + * - `export_version`: schema version (currently `"5"`) * - `exported_at`: ISO-8601 timestamp * - `agent`: name, description, schema_version, definition, timestamps * - `trigger`: trigger type, input template, schedules @@ -996,7 +998,7 @@ export interface paths { * * Key fields: * - `input`: text input for agents with a `dynamic_input` trigger. - * - `input_upload_id`: alternatively, reference a file previously uploaded via `POST /agents/{agent_id}/upload-input` (mutually exclusive with `input`). + * - `input_upload_id` / `input_upload_ids`: reference one or more files previously uploaded via `POST /agents/{agent_id}/upload-input`. Send them **with** `input` to pair prompt text with the files (the text leads, each file's extracted text follows); only the two upload fields are mutually exclusive with each other. * - `priority`: set true for latency-sensitive, user-facing work. For agents with a `streaming_result` step, set `priority=true` to enable real-time token streaming; otherwise the run still proceeds, but without live token streaming. * - `metadata`: a JSON object that becomes available to agent steps for string substitution. * @@ -1037,11 +1039,12 @@ export interface paths { * * Input options (for `dynamic_input` triggers): * - `input`: text input passed directly. - * - `input_upload_id`: reference a file uploaded via `POST /agents/{agent_id}/upload-input` (mutually exclusive with `input`). + * - `input_upload_id` / `input_upload_ids`: reference one or more files uploaded via `POST /agents/{agent_id}/upload-input`. Combine either with `input` to send prompt text alongside the files; only the two upload fields are mutually exclusive with each other. * * Client guidance: * - Keep the connection open and handle keepalive comments. * - On `timeout` or `error`, the payload includes `run_id` so clients can resume by polling `GET /agents/runs/{run_id}`. + * - `stream_token` events carry the model's raw output. When the agent pairs `streaming_result` with a sibling `extract_content`/`display_result` branch, that branch's `display_result` takes precedence over the stream, so the `done` snapshot's `output` is the validated payload and the tokens are a progress channel — render tokens live, but read the result from `done`. Check `done.status` first: the streamed text is already the run's output when the stream ends, so a run that FAILED its validation step still carries that raw text in `output`. * * Auth & scoping: * - Requires `X-API-Key` header or OAuth Bearer token. All resources are scoped to the caller's account. @@ -1580,7 +1583,7 @@ export interface paths { put?: never; /** * Subscribe to alert - * @description Subscribe the current user to an alert. Subscribed users receive email notifications when the alert status changes or new comments are added. + * @description Subscribe the current user to an alert. Subscribed users receive email notifications when the alert status changes or new comments are added, for as long as they remain an owner or administrator of the account. * * Auth & scoping: * - Requires `X-API-Key` header or OAuth Bearer token. @@ -1615,6 +1618,152 @@ export interface paths { patch?: never; trace?: never; }; + "/cloud-drives": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List the account's cloud-drive connections + * @description List the account's cloud-drive connections. Use a connection's `id` as `cloud_drive_connection_id` when creating a `cloud_drive` content source or binding a file-change agent trigger. `realtime_updates` reports whether changes arrive within seconds or on the scheduled backstop sweep. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + get: operations["list_cloud_drives_api_api_cloud_drives_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/cloud-drives/providers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List configured cloud-drive providers + * @description List the cloud-drive providers whose OAuth app is configured on this deployment (e.g. Dropbox, Google Drive), with the permissions each requests. A provider missing from this list cannot be connected here. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + get: operations["list_cloud_drive_providers_api_api_cloud_drives_providers_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/cloud-drives/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get a cloud-drive connection + * @description Fetch a single cloud-drive connection by id. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + get: operations["get_cloud_drive_api_api_cloud_drives__connection_id__get"]; + put?: never; + post?: never; + /** + * Delete a cloud-drive connection + * @description Soft-delete a connection and clear its tokens. Refused with **409** while anything still depends on it — a live agent trigger, or a `cloud_drive` content source ingesting into a knowledge base. `GET /{connection_id}/agents` shows which agents reference it, but does NOT list content sources, so treat the 409 as the authoritative check rather than a clean /agents response. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + delete: operations["delete_cloud_drive_api_api_cloud_drives__connection_id__delete"]; + options?: never; + head?: never; + /** + * Update a cloud-drive connection + * @description Rename a connection and/or change the folder it watches. Changing the folder resets the sync cursor, so existing files in the new folder are not replayed as triggers. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + patch: operations["update_cloud_drive_api_api_cloud_drives__connection_id__patch"]; + trace?: never; + }; + "/cloud-drives/{connection_id}/agents": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List agents using a cloud-drive connection + * @description Agents that reference this connection — via a cloud-drive step, a `prompt_call` cloud-drive tool, or a file-change trigger. Check this before disconnecting or deleting a connection. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + get: operations["get_agents_using_cloud_drive_api_api_cloud_drives__connection_id__agents_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/cloud-drives/{connection_id}/disconnect": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Disconnect a cloud-drive connection + * @description Revoke and clear the stored tokens and stop change notifications, keeping the connection row so it can be reconnected from the app. Agents bound to it stop firing until it is reconnected. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + post: operations["disconnect_cloud_drive_api_api_cloud_drives__connection_id__disconnect_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/cloud-drives/{connection_id}/rejections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List files this connection did not process + * @description Recent files the connection deliberately skipped, newest first, with the reason: `too_large` (above the size cap), `download_failed` (the provider would not serve the bytes), or `flood` (the per-sync or per-account run cap was hit, so remaining changes were dropped). + * + * This is the answer to "why didn't my agent run for that file?" — a skipped file fires no trigger and appears nowhere else. + * + * Requires an API key or OAuth token scoped to the account. Cloud-drive secrets are never returned. + */ + get: operations["list_cloud_drive_rejections_api_api_cloud_drives__connection_id__rejections_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/contents/{source_connection_content_version}": { parameters: { query?: never; @@ -1654,8 +1803,10 @@ export interface paths { * - `text/xml` * * Notes: + * - A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected. * - Use this endpoint for small text payloads; larger files should use `/upload`. * - `title` is merged into `metadata.title` when not already present. + * - The replacement is indexed in the background. This `SourceConnectionContentVersion` ID keeps working, and reads return the previous content until indexing finishes; poll `list_source_content_status` to follow it. The returned `content_version_id` is the new version. */ put: operations["replace_content_with_inline_text_api_contents__source_connection_content_version__put"]; post?: never; @@ -1667,6 +1818,7 @@ export interface paths { * * Auth & scoping: * - Requires `X-API-Key` header or OAuth Bearer token. You can only delete content belonging to your account. + * - A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected. */ delete: operations["delete_content_api_contents__source_connection_content_version__delete"]; options?: never; @@ -1714,7 +1866,7 @@ export interface paths { * * This behaves like a source file upload, but it targets an existing content version ID. This is useful when you want to correct or update an uploaded document while keeping references stable. * - * **Maximum file size:** 209715200 bytes. + * **Maximum file size:** 209715200 bytes, except `image/svg+xml` at 5242880 bytes (SVG is sanitized before it is stored). * * **Supported MIME types:** * - `application/epub+zip` @@ -1751,6 +1903,8 @@ export interface paths { * - `video/x-msvideo` * * Notes: + * - A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected. + * - The replacement is indexed in the background. This `SourceConnectionContentVersion` ID keeps working, and reads return the previous content until indexing finishes; poll `list_source_content_status` to follow it. The returned `content_version_id` is the new version. * - If the uploaded file's content type is `application/octet-stream`, the server attempts to infer the type from the file extension. * - Use `metadata` to attach an arbitrary JSON object of metadata (for example `metadata={"category":"docs"}`). * - `title` is a convenience field and is merged into the metadata as `metadata.title` (it does not override an existing `metadata.title`). @@ -1825,7 +1979,7 @@ export interface paths { put?: never; /** * Revert to the shared agent.seclai.com sending domain - * @description Clear the account's primary domain so agent email reverts to the shared `agent.seclai.com` sending/inbound scheme, WITHOUT removing the configured domain(s) — they stay verified and can be promoted again later. Owner/admin only. + * @description Clear the account's primary domain so agent email reverts to the shared `agent.seclai.com` sending domain, WITHOUT removing the configured domain(s) — they stay verified and can be promoted again later. Owner/admin only. * * Auth & scoping: requires an `X-API-Key` header or OAuth Bearer token bound to a **user** (an account-only key is refused with 403); the domain is scoped to the key's account. */ @@ -1890,8 +2044,8 @@ export interface paths { get?: never; put?: never; /** - * Make a verified domain the account's primary sending/inbound domain - * @description Promote a verified domain to the account's primary domain — agent email then sends FROM and receives ON this domain (`@`, `@`) instead of the shared `agent.seclai.com`. The domain must be verified. Owner/admin only. + * Make a verified domain the account's primary sending domain + * @description Promote a verified domain to the account's primary domain — agent email then sends FROM this domain and shows its addresses on it (`@`, `@`) instead of the shared `agent.seclai.com`; addresses keep resolving on the account's other verified domains and the shared form. The domain must be verified. Owner/admin only. * * Auth & scoping: requires an `X-API-Key` header or OAuth Bearer token bound to a **user** (an account-only key is refused with 403); the domain is scoped to the key's account. */ @@ -2326,7 +2480,7 @@ export interface paths { * Compact Memory Bank * @description Trigger an on-demand compaction run for a memory bank. * - * The bank must have at least one compaction threshold configured (max_age_days, max_turns, or max_size_tokens). Compaction runs asynchronously — the response confirms scheduling, not completion. + * The bank must have at least one compaction threshold configured (max_turns or max_size_tokens). Age no longer triggers compaction — use retention_days to remove entries by age. Compaction runs asynchronously — the response confirms scheduling, not completion. */ post: operations["compact_memory_bank_api_memory_banks__memory_bank_id__compact_post"]; delete?: never; @@ -2406,10 +2560,12 @@ export interface paths { }; /** * List Models - * @description List all enabled LLM models with full details. + * @description List the enabled LLM models with full details. * * Returns models grouped by provider, including capabilities, credit pricing, tool support, variant tiers, and lifecycle status. * + * A model whose credit rate has not been published yet is omitted, so you are never offered a model that cannot be billed and therefore cannot be run. Such a model may appear later without any other change. + * * Optional query parameters: * - `provider`: filter by provider (e.g. 'anthropic', 'openai') * - `supports_tool_use`: filter to models with tool calling support @@ -2525,6 +2681,38 @@ export interface paths { patch: operations["mark_read_api_models_alerts__alert_id__read_patch"]; trace?: never; }; + "/models/embedders": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Embedding Models + * @description List the embedding models a source can be created with. + * + * Each entry carries the `model_type` to pass as `embedding_model` when creating a source, the `dimensions` it supports, and — most importantly for multi-modal indexing — `supported_input_media`: the modalities that embedder can actually index. A source only honours a `media_types` entry its embedder lists here; unsupported kinds are dropped at save time with an `embedder_warning`, so check this before choosing an embedder for a knowledge base of images or video. + * + * Text-only embedders report `supported_input_media` as null. Pricing is reported as `credits` (per ~1,000 English words of text) plus `per_modality_rates` for the non-text modalities a multi-modal embedder bills differently. + * + * An embedder whose credit rate has not been published yet is omitted, so you are never offered one that cannot be billed. + * + * Optional query parameters: + * - `supports_input_media`: keep only embedders that can index this modality (`text`/`image`/`video`/`audio` or a full MIME) + * + * Auth & scoping: + * - Requires `X-API-Key` header or OAuth Bearer token. The catalog is global reference data, identical for every account. + */ + get: operations["list_embedding_models_api_models_embedders_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/models/generation-tiers": { parameters: { query?: never; @@ -2564,7 +2752,7 @@ export interface paths { * Returns a paginated, time-filtered list of experiments ordered by creation date descending. * * Auth & scoping: - * - Requires `X-API-Key` header or OAuth Bearer token. Experiments are scoped to the caller's account. + * - Requires `X-API-Key` header or OAuth Bearer token. Experiments are scoped to the caller's account and, when the credential is bound to a user, to that user. */ get: operations["list_experiments_api_models_playground_experiments_get"]; put?: never; @@ -2576,6 +2764,7 @@ export interface paths { * * Auth & scoping: * - Requires `X-API-Key` header or OAuth Bearer token. + * - When the credential is bound to a user, the experiment belongs to that user; only that user or an account-scoped key can cancel or delete it. */ post: operations["create_experiment_api_models_playground_experiments_post"]; delete?: never; @@ -2598,7 +2787,7 @@ export interface paths { * Returns the full experiment payload including prompt, model outputs, and evaluation results (if available). * * Auth & scoping: - * - Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account. + * - Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account and, when the credential is bound to a user, to that user; otherwise 404. */ get: operations["get_experiment_api_models_playground_experiments__experiment_id__get"]; put?: never; @@ -2610,7 +2799,7 @@ export interface paths { * Removes the experiment from list/detail views while preserving audit history. * * Auth & scoping: - * - Requires `X-API-Key` header or OAuth access token. The experiment must belong to the caller's account. + * - Requires `X-API-Key` header or OAuth access token. The experiment must belong to the caller's account and, when the credential is bound to a user, to that user; otherwise 404. */ delete: operations["delete_experiment_endpoint_api_models_playground_experiments__experiment_id__delete"]; options?: never; @@ -2634,7 +2823,7 @@ export interface paths { * Signals running model calls to abort and marks the experiment as canceled. * * Auth & scoping: - * - Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account. + * - Requires `X-API-Key` header or OAuth Bearer token. The experiment must belong to the caller's account and, when the credential is bound to a user, to that user; otherwise 404. */ post: operations["cancel_experiment_endpoint_api_models_playground_experiments__experiment_id__cancel_post"]; delete?: never; @@ -2643,6 +2832,33 @@ export interface paths { patch?: never; trace?: never; }; + "/models/rerankers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Reranker Models + * @description List the reranker models a knowledge base can be created with. + * + * A reranker re-scores the top results of a vector search for relevance. Each entry carries the `model_type` to pass as `reranker_model` on a knowledge base, its `credits_per_action`, and whether it is the platform default (`is_default`, used when you omit `reranker_model`). + * + * To disable reranking, send `"none"` or an empty string as `reranker_model` rather than a value from this list. Reranking scores text, so a knowledge base whose sources all embed media natively — whose chunks carry no text — defaults to no reranker. + * + * Auth & scoping: + * - Requires `X-API-Key` header or OAuth Bearer token. The catalog is global reference data, identical for every account. + */ + get: operations["list_reranker_models_api_models_rerankers_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/models/{model_id}/details": { parameters: { query?: never; @@ -3110,8 +3326,16 @@ export interface paths { * - `text/xml` * * Notes: + * - A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected. * - Use this endpoint for small text payloads; larger files should use `/upload`. * - `title` is merged into `metadata.title` when not already present. + * + * Tracking indexing progress: + * - **Which id you get back depends on `status`, and they are not interchangeable:** + * - `uploaded` — a new item. `content_version_id` is set and `source_connection_content_version_id` is `null`. Indexing continues in the background after this call returns. + * - `duplicate` — this exact file is already on the source, so nothing was created and nothing is being indexed. `content_version_id` is `null` and `source_connection_content_version_id` is the existing, already-indexed item: pass it straight to `GET /contents/{id}`. There is nothing to poll. + * - For an `uploaded` item, poll `GET /sources/{id}/contents/{content_version_id}` with the returned `content_version_id`, or `GET /sources/{id}/contents?content_version_id=…&content_version_id=…` for a whole batch, to follow each item through to `completed` or `failed`. + * - On those status endpoints `source_connection_content_version_id` stays `null` until the item finishes indexing; that is the id `GET /contents/{id}` takes. */ post: operations["upload_inline_text_to_source_api_sources__source_connection_id__post"]; /** @@ -3126,6 +3350,66 @@ export interface paths { patch?: never; trace?: never; }; + "/sources/{source_connection_id}/contents": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List content items and their indexing status + * @description List every content item this source has attempted to index, with the status of each. + * + * Unlike the source's `content_count`, which only counts finished items, this listing includes items that are still processing and items that failed — so a bulk upload can report per-item progress and point at the specific items that did not make it. + * + * Correlating with an upload: + * - Each item is keyed by `content_version_id`, which is what the upload endpoints return. Pass those ids as repeated `content_version_id` query parameters to poll exactly the items you uploaded. + * - `source_connection_content_version_id` is `null` until an item finishes indexing; once set, it is the id `GET /contents/{id}` takes. + * - `content_status` reaches `completed` on success and `failed` on error, with the reason in `error`. The intermediate values are `pending`, `fetching`, `transcribing`, `scanning`, and `indexing`. + * + * Parameters: + * - Pagination: `page` and `limit`. + * - Sorting: `sort` (created_at/title/status) and `order` (asc/desc). `created_at` sorts on when the item was uploaded or pulled. + * - Filtering: `status` and repeatable `content_version_id`. + * + * Auth & scoping: + * - Requires `X-API-Key` header or OAuth Bearer token. You can only list content for sources belonging to your account. + */ + get: operations["list_source_contents_api_sources__source_connection_id__contents_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/sources/{source_connection_id}/contents/{content_version_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get one content item's indexing status + * @description Get the indexing status of a single content item, addressed by the `content_version_id` the upload endpoints return. + * + * Use this to follow one uploaded file through indexing. To follow many at once, use `GET /sources/{id}/contents` with repeated `content_version_id` parameters instead of polling this endpoint per item. + * + * Auth & scoping: + * - Requires `X-API-Key` header or OAuth Bearer token. You can only access content belonging to your account. + */ + get: operations["get_source_content_status_endpoint_api_sources__source_connection_id__contents__content_version_id__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/sources/{source_connection_id}/embedding-migration": { parameters: { query?: never; @@ -3174,7 +3458,7 @@ export interface paths { * Cancel Source Embedding Migration * @description Cancel an active embedding migration for a custom-index source. * - * Only pending, running, or switching migrations can be cancelled. + * Only pending and running migrations can be cancelled. A migration that has reached the switching phase is committing its switch-over in a single transaction, so there is no half-applied state to back out of and cancel is refused. */ post: operations["cancel_source_embedding_migration_api_sources__source_connection_id__embedding_migration_cancel_post"]; delete?: never; @@ -3198,7 +3482,7 @@ export interface paths { put?: never; /** * Create export - * @description Start an asynchronous export job. Poll GET .../exports/{export_id} until status becomes completed, then use /download to retrieve the file. + * @description Start an asynchronous export job. Poll GET .../exports/{export_id} until status becomes completed, then use /download to retrieve the file. On an organization account, a key bound to a user must belong to an owner or administrator; a viewer's key is refused with 403 `permission_denied`. Personal accounts and account-scoped keys are unaffected. */ post: operations["create_source_export_api_sources__source_connection_id__exports_post"]; delete?: never; @@ -3243,7 +3527,7 @@ export interface paths { post?: never; /** * Delete export - * @description Delete an export job and remove the associated file from S3. This is a soft-delete: the database record is retained for audit purposes but the backing file is permanently removed. + * @description Delete an export job and remove the associated file from S3. This is a soft-delete: the database record is retained for audit purposes but the backing file is permanently removed. On an organization account, a key bound to a user must belong to an owner or administrator; a viewer's key is refused with 403 `permission_denied`. Personal accounts and account-scoped keys are unaffected. */ delete: operations["delete_source_export_api_sources__source_connection_id__exports__export_id__delete"]; options?: never; @@ -3262,7 +3546,7 @@ export interface paths { put?: never; /** * Cancel export - * @description Cancel a pending or running export. The background task will stop at the next chunk boundary. Completed, failed, expired, or already-cancelled exports cannot be cancelled. + * @description Cancel a pending or running export. The background task will stop at the next chunk boundary. Completed, failed, expired, or already-cancelled exports cannot be cancelled. On an organization account, a key bound to a user must belong to an owner or administrator; a viewer's key is refused with 403 `permission_denied`. Personal accounts and account-scoped keys are unaffected. */ post: operations["cancel_source_export_api_sources__source_connection_id__exports__export_id__cancel_post"]; delete?: never; @@ -3304,7 +3588,7 @@ export interface paths { * Upload a file to a content source * @description Upload a file to a content source. * - * **Maximum file size:** 209715200 bytes. + * **Maximum file size:** 209715200 bytes, except `image/svg+xml` at 5242880 bytes (SVG is sanitized before it is stored). * * **Supported MIME types:** * - `application/epub+zip` @@ -3341,6 +3625,7 @@ export interface paths { * - `video/x-msvideo` * * Notes: + * - A key bound to a user must belong to an owner or administrator of the account; a viewer's key is refused with 403 `permission_denied`. Account-scoped keys carry no user and are unaffected. * - If the uploaded file's content type is `application/octet-stream`, the server attempts to infer the type from the file extension. * - Use `metadata` to attach an arbitrary JSON object of metadata (for example `metadata={"author":"Ada","category":"docs"}`). * - `title` is a convenience field and is merged into the metadata as `metadata.title` (it does not override an existing `metadata.title`). @@ -3348,6 +3633,13 @@ export interface paths { * * Response: * - `status` is `uploaded` for a new upload, or `duplicate` when the same file already exists for this source. + * + * Tracking indexing progress: + * - **Which id you get back depends on `status`, and they are not interchangeable:** + * - `uploaded` — a new item. `content_version_id` is set and `source_connection_content_version_id` is `null`. Indexing continues in the background after this call returns. + * - `duplicate` — this exact file is already on the source, so nothing was created and nothing is being indexed. `content_version_id` is `null` and `source_connection_content_version_id` is the existing, already-indexed item: pass it straight to `GET /contents/{id}`. There is nothing to poll. + * - For an `uploaded` item, poll `GET /sources/{id}/contents/{content_version_id}` with the returned `content_version_id`, or `GET /sources/{id}/contents?content_version_id=…&content_version_id=…` for a whole batch, to follow each item through to `completed` or `failed`. + * - On those status endpoints `source_connection_content_version_id` stays `null` until the item finishes indexing; that is the id `GET /contents/{id}` takes. */ post: operations["upload_file_to_source_api_sources__source_connection_id__upload_post"]; delete?: never; @@ -3365,11 +3657,11 @@ export interface paths { }; /** * Download an agent-run attachment - * @description Streams the bytes of an attachment emitted by a step in the given agent run. ``attachment_id`` is the URL-safe-base64-encoded ``storage_key`` (use the encoder shared by webhook + email payload builders). + * @description Streams the bytes of an attachment emitted by a step in the given agent run. ``attachment_id`` is the ``id`` of an entry in the run's or a step's ``attachments``, or the URL-safe-base64-encoded storage key, which webhook and email links carry. * * Auth & scoping: * - Requires `X-API-Key` header or OAuth Bearer token. - * - The calling account must own ``run_id``; lookup failures (missing run, cross-account run, soft-deleted agent, unreferenced storage_key) all collapse to a single 404 to prevent cross-tenant existence enumeration. + * - The calling account must own ``run_id``; lookup failures (missing run, cross-account run, soft-deleted agent, a run whose trace was purged, a file not in the run) all collapse to a single 404 to prevent cross-tenant existence enumeration. * * MIME handling: * - Inline-safe MIMEs (image/*, audio/*, video/*, application/pdf, text/plain, application/vnd.seclai.manifest+json) are served with their declared type. @@ -3609,7 +3901,7 @@ export interface components { }[] | null; /** * Export Version - * @description Schema version of the export format (currently "2"). + * @description Schema version of the export format (currently "5"). */ export_version: string; /** @@ -3662,6 +3954,38 @@ export interface components { /** @description Status of the agent run attempt. */ status: components["schemas"]["PendingProcessingCompletedFailedStatus"]; }; + /** + * AgentRunFileResponse + * @description A file in a run's or a step's output. + */ + AgentRunFileResponse: { + /** + * Bytes + * @description Size of the file in bytes, when known. + */ + bytes: number | null; + /** + * Download Url + * @description `GET` URL that streams the file; accepts an API key or OAuth token. + */ + download_url: string; + /** + * Id + * Format: uuid + * @description File identifier, used to download it. + */ + id: string; + /** + * Mime + * @description MIME type of the file. + */ + mime: string; + /** + * Name + * @description The file's name in this run, as sent to email recipients and webhooks and matched by `{{attachments[...]}}` selectors. + */ + name: string | null; + }; /** AgentRunRequest */ AgentRunRequest: { /** @@ -3671,7 +3995,7 @@ export interface components { input?: string | null; /** * Input Upload Id - * @description ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with the 'input' field. Use ``input_upload_ids`` to attach multiple files. + * @description ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with ``input_upload_ids`` — use that field to attach multiple files. May be combined with ``input``: the prompt text leads and the file's extracted text follows under a ``# {filename}`` heading. * * **Attachment visibility:** a step only sees the upload when its template references the input — via ``{{input}}`` / ``{{agent.input}}`` / ``{{step..input|output}}`` (implicit, all attachments) or the ``{{attachments[…]}}`` family (explicit narrowing — e.g. ``{{attachments[0]}}``, ``{{attachments[*.pdf]}}``). * @@ -3680,7 +4004,7 @@ export interface components { input_upload_id?: string | null; /** * Input Upload Ids - * @description IDs of multiple previously uploaded files. Each upload's extracted text is concatenated under a heading; each upload's binary is surfaced as a separate ``MediaAttachment`` so multi-modal prompt steps reason over all files at once. Steps narrow visibility via ``{{attachments[…]}}`` selectors (by index, filename, or fnmatch glob). The batch must satisfy every selector the agent declares — exact names, indexed references (length must exceed the highest index), and glob patterns (each pattern needs at least one match). Mismatches return HTTP 400 with the unmet requirements listed. Mutually exclusive with ``input`` and ``input_upload_id`` — pass exactly one of the three. Max 20 uploads per run. + * @description IDs of multiple previously uploaded files. Each upload's extracted text is concatenated under a heading; each upload's binary is surfaced as a separate ``MediaAttachment`` so multi-modal prompt steps reason over all files at once. Steps narrow visibility via ``{{attachments[…]}}`` selectors (by index, filename, or fnmatch glob). The batch must satisfy every selector the agent declares — exact names, indexed references (length must exceed the highest index), and glob patterns (each pattern needs at least one match). Mismatches return HTTP 400 with the unmet requirements listed. Mutually exclusive with ``input_upload_id`` (two spellings of the same batch), but may be combined with ``input`` — the prompt text leads and the per-file sections follow, so "a photo plus a sentence about it" needs no synthetic text upload. Max 20 uploads per run. */ input_upload_ids?: string[] | null; /** @@ -3704,6 +4028,11 @@ export interface components { }; /** AgentRunResponse */ AgentRunResponse: { + /** + * Attachments + * @description Files in the run's output, in order. Empty for runs that produced none, for runs made before files were listed here, and once the run's trace is purged. + */ + attachments?: components["schemas"]["AgentRunFileResponse"][]; /** * Attempts * @description List of attempts made for this agent run. @@ -3716,7 +4045,7 @@ export interface components { blocked_policies?: components["schemas"]["routers__api__agents__GovernancePolicyRefResponse"][]; /** * Credits - * @description Credits consumed by the agent run, if applicable. + * @description Credits consumed by the agent run, if applicable. Can still rise briefly after the run ends, while governance screening finishes. */ credits: number | null; /** @@ -3756,12 +4085,12 @@ export interface components { input_scan_status?: string | null; /** * Output - * @description Output produced by the agent run. + * @description The run's output text; its files are in `attachments`. Below `Seclai-Version: 2026-09-30` an output that has files is instead the manifest JSON `{schema, text, attachments: [{storage_key, mime, name, label, bytes}]}`; `bytes` is absent on runs made before that version shipped. */ output: string | null; /** * Output Content Type - * @description MIME type of `output` — mirrors the terminal step's `output_content_type`. Consumers interpret `output` differently depending on this value: `application/vnd.seclai.manifest+json` is a multi-asset manifest with shape `{text, attachments: [{storage_key, mime, name, bytes}]}` — fetch each attachment via `GET /v2/agent-runs/{run_id}/attachments/{attachment_id}`, where `attachment_id` is the URL-safe base64 of the attachment's `storage_key` (accepts an API key or OAuth token). `text/plain` / `text/*` are free-form text. `application/json` is a JSON document. Null on runs that produced no terminal output or that pre-date this column. + * @description MIME type of `output` — mirrors the terminal step's `output_content_type`. `text/plain` / `text/*` are free-form text and `application/json` is a JSON document. Below `Seclai-Version: 2026-09-30` an output that has files reads `application/vnd.seclai.manifest+json` (see `output`); the same files are in `attachments` on every version, each with a `download_url`. Null on runs that produced no terminal output or that pre-date this column. */ output_content_type?: string | null; /** @@ -3786,6 +4115,11 @@ export interface components { * @description Step outputs and per-step timing/credits. Only included when requested. */ steps?: components["schemas"]["AgentRunStepResponse"][] | null; + /** + * Trace Purged At + * @description When this run's trace content was deleted under the account's agent-trace retention window. Non-null means `input`, `output` and every step's and tool call's I/O are null **by design** and will never be available again — the run aged out, it did not fail. Branch on this rather than on a null `output`: a run that genuinely produced nothing looks identical. Status, timing and credits remain accurate. + */ + trace_purged_at?: string | null; /** * Wait Ms * @description Cumulative milliseconds the run was parked on standard-mode wait steps. Subtracted from active duration in run-detail and duration-stats responses, exactly like hitl_wait_ms. Priority waits block inline and are not counted here. @@ -3799,9 +4133,14 @@ export interface components { * @description Agent step identifier. */ agent_step_id: string; + /** + * Attachments + * @description Files in this step's output, in order. Empty for steps that produced none, for steps run before files were listed here, and once the run's trace is purged. + */ + attachments?: components["schemas"]["AgentRunFileResponse"][]; /** * Credits Used - * @description Credits consumed by the step attempt, if applicable. + * @description Credits consumed by this step across every attempt it made. Some charges made outside any step, such as governance screening of the run's input, count toward the run's total but no step's. The timestamps above and the tool calls below describe the latest attempt only. */ credits_used: number; /** @@ -3816,12 +4155,12 @@ export interface components { ended_at: string | null; /** * Input - * @description Input provided to the step, if any. + * @description Input text provided to the step, if any. Below `Seclai-Version: 2026-09-30`, the manifest JSON when the step that produced it output files and is not a `for_each`. */ input: string | null; /** * Output - * @description Output produced by the step, if any. + * @description Output text produced by the step, if any; its files are in `attachments`. Below `Seclai-Version: 2026-09-30`, the manifest JSON when the step output files and is not a `for_each`. */ output: string | null; /** @@ -3846,6 +4185,11 @@ export interface components { * @description LLM tool calls made during this step (prompt_call steps only), ordered by execution. Empty for steps that invoked no tools. */ tool_calls?: components["schemas"]["AgentRunToolCallResponse"][]; + /** + * Warnings + * @description Authoring problems the step ran into, whether or not it then failed, such as a file name selector that matched none of its source's files. + */ + warnings?: string[] | null; }; /** AgentRunStreamRequest */ AgentRunStreamRequest: { @@ -3856,12 +4200,12 @@ export interface components { input?: string | null; /** * Input Upload Id - * @description ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with the 'input' field. Use ``input_upload_ids`` to attach multiple files. Subject to the same per-batch attachment-selector validation as the non-streaming endpoint. + * @description ID of a previously uploaded file (via POST /{agent_id}/upload-input) to use as the run input for dynamic-input triggers. Mutually exclusive with ``input_upload_ids`` — use that field to attach multiple files. May be combined with ``input``. Subject to the same per-batch attachment-selector validation as the non-streaming endpoint. */ input_upload_id?: string | null; /** * Input Upload Ids - * @description IDs of multiple previously uploaded files. See the non-streaming endpoint for full semantics, including per-batch selector validation (exact names, indexed references, and glob patterns must all be satisfied or the run is rejected with HTTP 400). Max 20. + * @description IDs of multiple previously uploaded files. See the non-streaming endpoint for full semantics, including per-batch selector validation (exact names, indexed references, and glob patterns must all be satisfied or the run is rejected with HTTP 400) and combining the batch with ``input`` prompt text. Max 20. */ input_upload_ids?: string[] | null; /** @@ -3931,7 +4275,7 @@ export interface components { round_index: number; /** * Sequence - * @description 0-based ordinal of this call within its step run. + * @description 0-based ordinal of this call within one attempt of the step, so it repeats across a retried step's attempts. This list holds the latest attempt only. * @default 0 */ sequence: number; @@ -4109,6 +4453,34 @@ export interface components { */ total: number; }; + /** AgentUsingCloudDriveResponseModel */ + AgentUsingCloudDriveResponseModel: { + /** + * Agent Id + * @description Agent identifier. + */ + agent_id: string; + /** + * Agent Name + * @description Agent name. + */ + agent_name: string; + /** + * Trigger Types + * @description File-change trigger types bound to this drive. + */ + trigger_types: string[]; + /** + * Via Prompt Tool + * @description Uses a prompt_call cloud-drive tool. + */ + via_prompt_tool: boolean; + /** + * Via Step + * @description Uses a list/read/write cloud-drive step. + */ + via_step: boolean; + }; /** * AiAssistantAcceptResponse * @description Response from accepting and executing a plan. @@ -4493,27 +4865,236 @@ export interface components { */ status: string; }; - /** - * CompactionEvaluationModel - * @description Structured LLM-as-judge evaluation result. - */ - CompactionEvaluationModel: { + /** CloudDriveAccessLevelResponseModel */ + CloudDriveAccessLevelResponseModel: { /** - * Reasoning - * @description Explanation of the evaluation. + * Default + * @description Whether connecting without a choice uses it. */ - reasoning: string; + default: boolean; /** - * Score - * @description Quality score from 1 to 5. + * Description + * @description What agents can do at this level. */ - score: number; + description: string; /** - * Verdict - * @description 'pass' or 'fail'. + * Key + * @description Level identifier, e.g. `read_write`/`read_only`. */ - verdict: string; - }; + key: string; + /** + * Label + * @description Short human-readable name. + */ + label: string; + }; + /** CloudDriveProviderResponseModel */ + CloudDriveProviderResponseModel: { + /** + * Access Levels + * @description Mutually-exclusive permission bundles offered when connecting. Connecting happens in the app, so this is informational here — it explains what a connection's `access_level` can be. + */ + access_levels: components["schemas"]["CloudDriveAccessLevelResponseModel"][]; + /** + * Display Name + * @description Human-readable provider name. + */ + display_name: string; + /** + * Key + * @description Provider key used as `provider` on a connection. + */ + key: string; + /** + * Scopes + * @description OAuth permissions this provider can request. + */ + scopes: components["schemas"]["CloudDriveScopeResponseModel"][]; + }; + /** + * CloudDriveRejectionResponseModel + * @description One file the connection deliberately did not process. + */ + CloudDriveRejectionResponseModel: { + /** + * Created At + * @description When the file was skipped. + */ + created_at: string; + /** + * Detail + * @description Extra context, e.g. the cap that was hit. + */ + detail?: string | null; + /** + * File Id + * @description The provider's file id, when the file was known. + */ + file_id?: string | null; + /** + * File Path + * @description Path of the skipped file, when known. + */ + file_path?: string | null; + /** + * Id + * @description Rejection identifier. + */ + id: string; + /** + * Reason + * @description `too_large`, `download_failed`, or `flood`. + */ + reason: string; + }; + /** + * CloudDriveResponseModel + * @description A cloud-drive connection, without any secret material. + */ + CloudDriveResponseModel: { + /** + * Access Level + * @description The permission bundle the granted scopes correspond to — `read_write` or `read_only`. Null when the grant matches no level the provider currently offers; treat that as unknown rather than assuming write access. + */ + access_level?: string | null; + /** + * Connected + * @description True when the connection is usable. + */ + connected: boolean; + /** + * Created At + * @description When the connection was created. + */ + created_at: string; + /** + * Drive Id + * @description Opaque id of the shared drive the folder resolves to, or null for the user's own drive. Stable across renames — compare on this rather than on the name in `folder_path`. + */ + drive_id?: string | null; + /** + * Drive Name + * @description Display name the shared drive last resolved to. Presentation only; never match on it. + */ + drive_name?: string | null; + /** + * Drive Name Stale + * @description True when `drive_name` could not be re-confirmed (the drive was deleted, access was lost, or the provider was unreachable). The last known name is still reported — treat it as possibly out of date rather than current. + */ + drive_name_stale: boolean; + /** + * External Account Id + * @description The provider's own opaque account identifier (never an email). + */ + external_account_id?: string | null; + /** + * Folder Path + * @description Watched folder; empty string means the drive root. A folder on a shared drive is written `/Shared drives//`. + */ + folder_path: string; + /** + * Id + * @description Connection identifier. + */ + id: string; + /** + * Last Error + * @description Most recent sync or authorization error, if any. + */ + last_error?: string | null; + /** + * Last Synced At + * @description When the connection last synced successfully. + */ + last_synced_at?: string | null; + /** + * Name + * @description Human-readable name. + */ + name?: string | null; + /** + * Oauth Scopes + * @description Space-separated OAuth scopes granted to this connection. + */ + oauth_scopes?: string | null; + /** + * Provider + * @description Provider key, e.g. `dropbox` or `google_drive`. + */ + provider: string; + /** + * Realtime Updates + * @description True when changes arrive via the provider's push notifications. False means the drive still syncs, but only on the scheduled backstop sweep rather than within seconds of a change. + */ + realtime_updates: boolean; + /** + * Status + * @description One of `active`, `pending_auth`, `error`, `disconnected`. + */ + status: string; + /** + * Updated At + * @description When the connection was last modified. + */ + updated_at: string; + }; + /** CloudDriveScopeResponseModel */ + CloudDriveScopeResponseModel: { + /** + * Description + * @description What the scope allows. + */ + description: string; + /** + * Key + * @description The OAuth scope string sent to the provider. + */ + key: string; + /** + * Label + * @description Short human-readable name. + */ + label: string; + /** + * Recommended + * @description Whether this scope is requested by default on connect. + */ + recommended: boolean; + }; + /** CloudDriveUpdateRequest */ + CloudDriveUpdateRequest: { + /** + * Folder Path + * @description New watched folder; empty means the whole drive. A folder on a shared drive is written `/Shared drives//`. Changing it resets the sync cursor, so files already in the new folder are NOT replayed as triggers — only subsequent changes fire, matching connect-time behaviour. Rejected when the new folder would make an agent that writes there re-trigger itself. + */ + folder_path?: string | null; + /** + * Name + * @description New display name for the connection. + */ + name?: string | null; + }; + /** + * CompactionEvaluationModel + * @description Structured LLM-as-judge evaluation result. + */ + CompactionEvaluationModel: { + /** + * Reasoning + * @description Explanation of the evaluation. + */ + reasoning: string; + /** + * Score + * @description Quality score from 1 to 5. + */ + score: number; + /** + * Verdict + * @description 'pass' or 'fail'. + */ + verdict: string; + }; /** * CompactionScheduledResponse * @description Acknowledgement that an on-demand compaction run was scheduled. @@ -4603,6 +5184,14 @@ export interface components { batch_size: number; /** Id */ id: string; + /** Media Name */ + media_name?: string | null; + /** Page Number */ + page_number?: number | null; + /** Source Mime */ + source_mime?: string | null; + /** Source Url */ + source_url?: string | null; /** Text */ text: string; /** Text End */ @@ -4626,10 +5215,9 @@ export interface components { alert_type: string; /** * Cooldown Minutes - * @description Cooldown period in minutes - * @default 60 + * @description Cooldown period in minutes. Omit to use the per-alert-type default (1440 for credit alerts, 60 otherwise). */ - cooldown_minutes: number; + cooldown_minutes?: number | null; /** * Distribution Type * @description Distribution type (owner, owner_admins, selected_members) @@ -4739,17 +5327,17 @@ export interface components { CreateKnowledgeBaseBody: { /** * Default Score Threshold - * @description Default minimum rerank score threshold. + * @description Prefilled into Minimum Rerank Score on a new retrieval step in the editor. Not applied at retrieval time — the step's own value is used. */ default_score_threshold?: number | null; /** * Default Top K - * @description Default results after reranking. + * @description Prefilled into Top K on a new retrieval step in the editor. Not applied at retrieval time. */ default_top_k?: number | null; /** * Default Top N - * @description Default number of results. + * @description Prefilled into Top N on a new retrieval step in the editor. Not applied at retrieval time — the step's own value is used. */ default_top_n?: number | null; /** @@ -4764,7 +5352,7 @@ export interface components { name: string; /** * Reranker Model - * @description Reranker model to use (null for no reranking). + * @description Reranker model to use — a `model_type` from `GET /models/rerankers`. Pass "none" to disable reranking (not a value from that list). Omit it for a default chosen from the sources ("none" when every source embeds media natively, whose chunks carry no text for a reranker to score). "" is accepted as a synonym for "none". */ reranker_model?: string | null; /** @@ -4810,7 +5398,7 @@ export interface components { embedding_model?: string | null; /** * Max Age Days - * @description Max entry age in days before compaction. Checked inline after each write and by the hourly background sweep. + * @description DEPRECATED and no longer applied. Age used to trigger compaction, which duplicated retention_days — both removed the same entries at the same age. Age now belongs solely to retention_days, which deletes; compaction triggers on max_size_tokens and max_turns. Rejected with 400 for clients sending Seclai-Version 2026-08-03 or later; accepted and stored but inert for older clients. */ max_age_days?: number | null; /** @@ -4836,10 +5424,15 @@ export interface components { name: string; /** * Retention Days - * @description Content source retention in days. - * @default 30 + * @description Retention in days — when entries are deleted outright, text and embeddings. This is the only age-based control; compaction triggers on max_size_tokens and max_turns. For clients sending Seclai-Version 2026-08-03 or later, omitting the field resolves per bank type: 90 days for a conversation bank, indefinite for a general bank. Older clients keep the previous default of 30 days for a conversation bank — unless a longer max_age_days was sent, which wins, since the window is never lowered beneath the only age the caller expressed — while a general bank keeps entries indefinitely. Send an explicit value (or null for indefinite) to be unambiguous on every version. + */ + retention_days?: number | null; + /** + * Strip Quoted Reply Chains + * @description Conversation banks only. When true, a conversation turn written to this bank has the quoted reply chain an email client prepends to a reply dropped from it. Only inbound (user) turns are affected, and only words in a run of at least ~40 matching a recent turn word for word are dropped (line wrapping and punctuation at a word's edge are ignored). A word the sender changed is kept, including a one-character change inside a link, address or amount, unless the change is only to that edge punctuation. + * @default false */ - retention_days: number | null; + strip_quoted_reply_chains: boolean; /** * Type * @description Bank type. 'conversation' for chat-turn data with conversation_key + speaker; 'general' for flat entries with optional group_key. @@ -4891,14 +5484,14 @@ export interface components { dimensions?: number | null; /** * Embedding Model - * @description Embedding model override. + * @description Embedding model override — a `model_type` from `GET /models/embedders`, which also reports each embedder's `supported_input_media`. Defaults to the platform embedder (`default_model_type` on that endpoint) when omitted. Indexing images or video requires an embedder that lists that modality. */ embedding_model?: string | null; /** @description Index mode for custom_index sources: fast_and_cheap (default), balanced, slow_and_thorough, or custom. */ index_mode?: components["schemas"]["SourceIndexMode"] | null; /** * Media Types - * @description Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored; unsupported values are dropped. Omit / [] for text-only. + * @description Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored (see `supported_input_media` on GET /models/embedders); unsupported values are dropped. Omit / [] for text-only. */ media_types?: string[] | null; /** @@ -5029,6 +5622,27 @@ export interface components { /** Title */ title: string; }; + /** + * EffortOptionsResponse + * @description The reasoning-effort values a model accepts. + */ + EffortOptionsResponse: { + /** + * Default + * @description The vendor's default level, when known. + */ + default?: string | null; + /** + * Kind + * @description `levels` today: `values` lists them. + */ + kind: string; + /** + * Values + * @description Accepted values, weakest first. + */ + values?: string[]; + }; /** EmailDomainResponse */ EmailDomainResponse: { /** @@ -5142,6 +5756,163 @@ export interface components { /** Trigger Type */ trigger_type: string; }; + /** + * EmbeddingModalityRateResponse + * @description Per-modality rate for a multi-modal embedder. + * + * The default ``credits`` field on :class:`EmbeddingModelResponse` is the + * text rate (credits per ~1k English words). Embedders that index image or + * video chunks natively charge those modalities at a different rate and unit + * — e.g. Cohere Embed v4 prices images per record; Nova 2 Multimodal prices + * video per second. Surfacing the modality and unit lets a caller render an + * honest cost breakdown alongside the text rate. + */ + EmbeddingModalityRateResponse: { + /** + * Credits + * @description Rate value in the unit below + */ + credits: number; + /** + * Modality + * @description Modality kind, e.g. image / video + */ + modality: string; + /** + * Unit + * @description Billing unit for this rate (credit_per_record / credit_per_second / credit_per_1000_tokens). + */ + unit: string; + }; + /** + * EmbeddingModelListResponse + * @description Legacy (header-less) response shape for the embedder catalog. + */ + EmbeddingModelListResponse: { + /** + * Default Dimension + * @description Dimensions used with the default embedding model + */ + default_dimension?: number | null; + /** + * Default Model Type + * @description Embedding model used when a source does not override it + */ + default_model_type?: string | null; + /** + * File Processing Credits Per Mb + * @description Credits per MB for file processing at ingest + */ + file_processing_credits_per_mb: number; + /** + * Models + * @description Available embedding models + */ + models: components["schemas"]["EmbeddingModelResponse"][]; + /** + * Storage Credits + * @description Monthly storage credits per dimension count + */ + storage_credits: components["schemas"]["EmbeddingStorageCreditsResponse"][]; + }; + /** + * EmbeddingModelResponse + * @description Information about an embedding model. + */ + EmbeddingModelResponse: { + /** + * Credits + * @description Estimated credits per 1,000 English words + */ + credits: number; + /** + * Description + * @description Model description + */ + description?: string | null; + /** + * Dimensions + * @description Dimensions options + */ + dimensions: number[]; + /** + * Is New + * @description Whether the model is newly released + * @default false + */ + is_new: boolean; + /** + * Max Input Tokens + * @description Max input tokens per request + */ + max_input_tokens?: number | null; + /** + * Model Id + * @description Model identifier + */ + model_id: string; + /** + * Model Type + * @description Full model type identifier (enum value). This is the value to send as embedding_model when creating a source. + */ + model_type: string; + /** + * Mteb Retrieval Score + * @description MTEB retrieval score + */ + mteb_retrieval_score?: number | null; + /** + * Name + * @description Human-readable model name + */ + name?: string | null; + /** + * Per Modality Rates + * @description Non-text rates the vendor charges for this embedder (image, video, audio). Empty for text-only embedders. + */ + per_modality_rates?: components["schemas"]["EmbeddingModalityRateResponse"][]; + /** + * Provider + * @description Model provider identifier + */ + provider?: string | null; + /** + * Speed + * @description Model processing speed + */ + speed?: string | null; + /** + * Supported Input Media + * @description Modalities the embedder accepts on input (short kinds like text / image / video, or full MIMEs). null means text-only. A source only honours a media_types entry its embedder lists here. + */ + supported_input_media?: string[] | null; + /** + * Supported Languages + * @description Supported languages + */ + supported_languages?: string[] | null; + /** + * Url + * @description Model documentation URL + */ + url?: string | null; + }; + /** + * EmbeddingStorageCreditsResponse + * @description Monthly storage credits per stored record at a dimension count. + */ + EmbeddingStorageCreditsResponse: { + /** + * Credits + * @description Credits per record per month + */ + credits: number; + /** + * Dimensions + * @description Number of embedding dimensions + */ + dimensions: number; + }; /** * EvaluationCriteriaResponse * @description Response schema for evaluation criteria. @@ -5460,6 +6231,13 @@ export interface components { completed_at: string | null; /** Created At */ created_at: string; + /** + * Effort + * @description The reasoning effort each model was run at, by model ID. + */ + effort?: { + [key: string]: string; + }; /** Error Message */ error_message: string | null; /** Evaluation Complexity */ @@ -5989,17 +6767,17 @@ export interface components { created_at: string; /** * Default Score Threshold - * @description Default minimum rerank score. + * @description Editor default for a new retrieval step's Minimum Rerank Score. */ default_score_threshold?: number | null; /** * Default Top K - * @description Default results after reranking. + * @description Editor default for a new retrieval step's Top K. */ default_top_k?: number | null; /** * Default Top N - * @description Default number of results to return. + * @description Editor default for a new retrieval step's Top N. */ default_top_n?: number | null; /** @@ -6124,7 +6902,7 @@ export interface components { description?: string | null; /** * Max Age Days - * @description Max age in days. + * @description Always null. Age-based compaction is retired — the assistant never suggests it. Kept so an SDK generated before the change still validates this response. */ max_age_days?: number | null; /** @@ -6231,7 +7009,7 @@ export interface components { id: string; /** * Max Age Days - * @description Max entry age in days before compaction. Checked both inline after each write and by the hourly background sweep. + * @description DEPRECATED and no longer applied. Age now belongs solely to retention_days, which deletes; compaction triggers on max_size_tokens and max_turns. Always null for clients sending Seclai-Version 2026-08-03 or later; older clients keep reading whatever value was stored. */ max_age_days?: number | null; /** @@ -6264,6 +7042,12 @@ export interface components { * @description Linked content source ID (null if not yet provisioned). */ source_connection_id?: string | null; + /** + * Strip Quoted Reply Chains + * @description Conversation banks only. When true, a conversation turn written to this bank has the quoted reply chain an email client prepends to a reply dropped from it. Only inbound (user) turns are affected, and only words in a run of at least ~40 matching a recent turn word for word are dropped (line wrapping and punctuation at a word's edge are ignored). A word the sender changed is kept, including a one-character change inside a link, address or amount, unless the change is only to that edge punctuation. + * @default false + */ + strip_quoted_reply_chains: boolean; /** * Type * @description Bank type: conversation (chat-turn with speaker) or general (flat entries). @@ -6352,6 +7136,13 @@ export interface components { * @description Create a model playground experiment via the public API. */ PlaygroundCreateRequest: { + /** + * Effort + * @description Reasoning effort per model id, each one of that model's `effort_options` values. Not combinable with `json_template`. + */ + effort?: { + [key: string]: string; + } | null; /** * Evaluation Complexity * @description simple, medium, or complex @@ -6506,27 +7297,113 @@ export interface components { */ removed: boolean; }; - /** ResumeInboundResponse */ - ResumeInboundResponse: { - /** Resumed */ - resumed: boolean; - }; - /** SendTestEmailResponse */ - SendTestEmailResponse: { + /** + * RerankerModelListResponse + * @description Legacy (header-less) response shape for the reranker catalog. + */ + RerankerModelListResponse: { /** - * Sent - * @default true + * Default Model Type + * @description Reranker used when a knowledge base does not choose one */ - sent: boolean; + default_model_type: string; + /** + * Models + * @description Available reranker models + */ + models: components["schemas"]["RerankerModelResponse"][]; + /** + * Search Processing Credits + * @description Credits charged for processing a search request + */ + search_processing_credits: number; }; /** - * SetAutoBlockModeRequest - * @description Set the account's governance auto-block mode (shared REST request). + * RerankerModelResponse + * @description Information about a reranker model. */ - SetAutoBlockModeRequest: { - /** Mode */ - mode: string; - }; + RerankerModelResponse: { + /** + * Credits Per Action + * @description Credits charged per rerank action + */ + credits_per_action: number; + /** + * Description + * @description Model description + */ + description?: string | null; + /** + * Is Default + * @description Whether this is the platform default reranker + */ + is_default: boolean; + /** + * Is New + * @description Whether the model is newly released + * @default false + */ + is_new: boolean; + /** + * Max Input Tokens + * @description Max input tokens per request + */ + max_input_tokens?: number | null; + /** + * Model Type + * @description Full model type identifier. This is the value to send as reranker_model on a knowledge base; send "none" or an empty string to disable reranking. + */ + model_type: string; + /** + * Name + * @description Human-readable model name + */ + name: string; + /** + * Provider + * @description Model provider identifier + */ + provider?: string | null; + /** + * Supported Languages + * @description Supported languages + */ + supported_languages?: string[] | null; + /** + * Url + * @description Model documentation URL + */ + url?: string | null; + }; + /** ResumeInboundResponse */ + ResumeInboundResponse: { + /** Resumed */ + resumed: boolean; + }; + /** SendTestEmailResponse */ + SendTestEmailResponse: { + /** + * Sent + * @default true + */ + sent: boolean; + }; + /** ServiceUnavailableError */ + ServiceUnavailableError: { + error: { + /** @enum {string} */ + code: "database_unavailable" | "vector_store_unavailable"; + message: string; + }; + }; + /** + * SetAutoBlockModeRequest + * @description Set the account's governance auto-block mode (shared REST request). + */ + SetAutoBlockModeRequest: { + /** Mode */ + mode: string; + }; /** SolutionSourceConnectionResponse */ SolutionSourceConnectionResponse: { /** @@ -6620,6 +7497,108 @@ export interface components { */ url: string; }; + /** + * SourceContentStatusListResponse + * @description Response model for a paginated per-item indexing status list. + */ + SourceContentStatusListResponse: { + /** Data */ + data: components["schemas"]["SourceContentStatusResponse"][]; + pagination: components["schemas"]["PaginationResponse"]; + }; + /** + * SourceContentStatusResponse + * @description Response model for one content item's indexing status. + */ + SourceContentStatusResponse: { + /** + * Awaiting Reindex + * @description True when the item is linked and reports completed but its content is not yet embedded under the index the source connection currently uses, because it still sits under the index that connection used before an embedding migration switched it. Anything ingested while a migration ran can land in this state. Semantic and content search will not match it until it is re-embedded; a title keyword match can still return it, so the item may appear in results while its body is unsearchable. It clears on its own — a reconciliation pass re-embeds the item under the current index, typically within minutes of the migration finishing, and a daily sweep retries whatever is still outstanding, so a large backlog can take more than one sweep to drain. The re-embedding is not charged to your account: nothing you did caused it, so Seclai absorbs the cost. Never true for an item that is simply still indexing; content_status covers that. + * @default false + */ + awaiting_reindex: boolean; + /** + * Content Status + * @description Indexing status: pending, fetching, transcribing, scanning, indexing, completed, or failed. + */ + content_status: string; + /** + * Content Token Count + * @description Extracted token count. + */ + content_token_count: number | null; + /** + * Content Type + * @description Content type group: text, audio, video, image, or document. + */ + content_type: string; + /** + * Content Url + * @description Internal URL identifying the item. Uploaded files use a `file-upload://` URL. + */ + content_url: string | null; + /** + * Content Version Id + * @description ID of the content version. This is the `content_version_id` returned by the upload endpoints, so it is what you match an upload against. + */ + content_version_id: string; + /** + * Content Word Count + * @description Extracted word count. + */ + content_word_count: number | null; + /** + * Error + * @description Why the item failed, when `content_status` is `failed`. + */ + error: string | null; + /** + * Extracted Media Capped + * @description True when extraction stopped with media still unread, so the item references more media than was indexed and media search will not match anything past the cut. Two causes: a web page that ran out of the budget for fetching remote assets, or a container that could not be read to the end (a truncated or hostile archive). An uploaded document that reads cleanly is never capped, however much media it holds — there is no limit on that. + * @default false + */ + extracted_media_capped: boolean; + /** + * Extracted Media Count + * @description Number of embedded images / videos extracted from inside this item and indexed as their own chunks. There is no limit on this — a document contributes as many as it holds. Null when there is no media record for the item: the extraction pass has not run, does not apply to this container, or found nothing. Treat null as 'unknown', never as zero. + */ + extracted_media_count?: number | null; + /** + * Extracted Media Limit + * @description The bound that was reached, when extracted_media_capped is true and the stop was a bound — a number of fetch attempts, or a number of seconds. Null when extraction was not capped, or when it stopped because the container could not be read rather than because a bound fired. + */ + extracted_media_limit?: number | null; + /** + * Indexed At + * @description Timestamp when the item finished indexing and became retrievable. `null` until then. + */ + indexed_at: string | null; + /** + * Mime Type + * @description MIME type the item was ingested as, when known. + */ + mime_type: string | null; + /** + * Published At + * @description Publication timestamp of the item, when known. + */ + published_at: string | null; + /** + * Pulled At + * @description Timestamp when the item was uploaded or pulled. + */ + pulled_at: string; + /** + * Source Connection Content Version Id + * @description ID to pass to `GET /contents/{id}`. `null` until the item has finished indexing — an item that is still processing, or that failed, has no retrievable content and keeps this `null`. + */ + source_connection_content_version_id: string | null; + /** + * Title + * @description Title of the content item. + */ + title: string | null; + }; /** * SourceEmbeddingMigrationResponse * @description Response model for source embedding migration status. @@ -6921,7 +7900,7 @@ export interface components { target_dimensions: number; /** * Target Embedding Model - * @description Target embedding model enum + * @description Target embedding model — a `model_type` from `GET /models/embedders`, which also reports the `dimensions` each embedder supports and the modalities it can index. */ target_embedding_model: string; }; @@ -7107,17 +8086,17 @@ export interface components { UpdateKnowledgeBaseBody: { /** * Default Score Threshold - * @description Default score threshold (-1 to clear). + * @description Prefilled into Minimum Rerank Score on a new retrieval step (-1 to clear). */ default_score_threshold?: number | null; /** * Default Top K - * @description Default reranked results (0 to clear). + * @description Prefilled into Top K on a new retrieval step (0 to clear). */ default_top_k?: number | null; /** * Default Top N - * @description Default results (0 to clear). + * @description Prefilled into Top N on a new retrieval step (0 to clear). */ default_top_n?: number | null; /** @@ -7132,7 +8111,7 @@ export interface components { name?: string | null; /** * Reranker Model - * @description Reranker model (empty string for no reranking). + * @description New reranker model — a `model_type` from `GET /models/rerankers`. Pass "none" to turn reranking off (not a value from that list). Omitting the field (or sending null) leaves the current reranker in place — it does NOT turn it off. "" is accepted as a synonym for "none", but prefer "none": an empty string does not survive every client's serialization. */ reranker_model?: string | null; /** @@ -7161,7 +8140,7 @@ export interface components { description?: string | null; /** * Max Age Days - * @description Max entry age in days before compaction. Checked inline after each write and by the hourly background sweep. Send 0 to disable. + * @description DEPRECATED and no longer applied. Age now belongs solely to retention_days, which deletes; compaction triggers on max_size_tokens and max_turns. Rejected with 400 for clients sending Seclai-Version 2026-08-03 or later, except 0, which clears a value stored earlier. Accepted and stored but inert for older clients. */ max_age_days?: number | null; /** @@ -7184,6 +8163,11 @@ export interface components { * @description Content source retention in days. Send 0 to clear (indefinite). */ retention_days?: number | null; + /** + * Strip Quoted Reply Chains + * @description Conversation banks only. When true, a conversation turn written to this bank has the quoted reply chain an email client prepends to a reply dropped from it. Only inbound (user) turns are affected, and only words in a run of at least ~40 matching a recent turn word for word are dropped (line wrapping and punctuation at a word's edge are ignored). A word the sender changed is kept, including a one-character change inside a link, address or amount, unless the change is only to that edge punctuation. + */ + strip_quoted_reply_chains?: boolean | null; }; /** * UpdateSolutionRequest @@ -7208,7 +8192,7 @@ export interface components { UpdateSourceBody: { /** * Media Types - * @description Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored; unsupported values are dropped. [] disables media extraction (text-only). + * @description Media kinds to extract from indexed content and embed as multi-modal KB chunks. Subset of ['images', 'video']. Only kinds the source's embedder can index are honored (see `supported_input_media` on GET /models/embedders); unsupported values are dropped. [] disables media extraction (text-only). */ media_types?: string[] | null; /** @@ -7223,10 +8207,9 @@ export interface components { polling?: string | null; /** * Retention Days - * @description New retention period in days (null for unlimited). - * @default -1 + * @description New retention period in days — content older than this is deleted permanently. Send null to clear the window: content is then kept indefinitely. Omit the field to leave it unchanged. */ - retention_days: number | null; + retention_days?: number | null; }; /** UploadAgentInputApiResponse */ UploadAgentInputApiResponse: { @@ -7295,15 +8278,32 @@ export interface components { default: boolean; /** Description */ description?: string | null; - /** Input 1H Cache Write Credits Per 1000 Tokens */ + /** + * Input 1H Cache Write Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens written to a 1-hour prompt cache. + */ input_1h_cache_write_credits_per_1000_tokens?: number | null; - /** Input 5M Cache Write Credits Per 1000 Tokens */ + /** + * Input 30M Cache Write Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens written to a 30-minute prompt cache. + */ + input_30m_cache_write_credits_per_1000_tokens?: number | null; + /** + * Input 5M Cache Write Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens written to a 5-minute prompt cache. + */ input_5m_cache_write_credits_per_1000_tokens?: number | null; - /** Input Cache Hit Credits Per 1000 Tokens */ + /** + * Input Cache Hit Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens read from a prompt cache. + */ input_cache_hit_credits_per_1000_tokens?: number | null; /** Input Credits Per 1000 Tokens */ input_credits_per_1000_tokens?: number | null; - /** Long Context Input Cache Hit Credits Per 1000 Tokens */ + /** + * Long Context Input Cache Hit Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens read from a prompt cache, on a call whose input exceeds `long_context_threshold` tokens. + */ long_context_input_cache_hit_credits_per_1000_tokens?: number | null; /** Long Context Input Credits Per 1000 Tokens */ long_context_input_credits_per_1000_tokens?: number | null; @@ -7517,7 +8517,7 @@ export interface components { routers__api__agents__SetEmailTriggerConfigRequest: { /** * Alias - * @description Custom alias for the address `.@agent.seclai.com` (alphanumeric plus '+', '.', '-'; 1–32 chars; not starting/ending with '+', '.', '-'; not UUID-shaped). Pass null/empty to clear. + * @description Custom alias, unique per account, answering as `.@agent.seclai.com` and as `@` on each verified account email domain (alphanumeric plus '+', '.', '-'; 1–32 chars; not starting/ending with '+', '.', '-'; not UUID-shaped). Pass null/empty to clear. */ alias?: string | null; /** @@ -7657,6 +8657,11 @@ export interface components { * @description Feature name (e.g. 'source', 'solution'). */ feature: string; + /** + * Governance Conversation Id + * @description Governance conversation ID, if applicable. + */ + governance_conversation_id?: string | null; /** * Prompt Call Id * @description Prompt call ID for credit tracking. @@ -7827,6 +8832,22 @@ export interface components { * @description Error message, if any. */ error: string | null; + /** + * Extracted Media Capped + * @description True when extraction stopped with media still unread, so the item references more media than was indexed and media search will not match anything past the cut. Two causes: a web page that ran out of the budget for fetching remote assets, or a container that could not be read to the end (a truncated or hostile archive). An uploaded document that reads cleanly is never capped, however much media it holds — there is no limit on that. + * @default false + */ + extracted_media_capped: boolean; + /** + * Extracted Media Count + * @description Number of embedded images / videos extracted from inside this item and indexed as their own chunks. There is no limit on this — a document contributes as many as it holds. Null when there is no media record for the item: the extraction pass has not run, does not apply to this container, or found nothing. Treat null as 'unknown', never as zero. + */ + extracted_media_count?: number | null; + /** + * Extracted Media Limit + * @description The bound that was reached, when extracted_media_capped is true and the stop was a bound — a number of fetch attempts, or a number of seconds. Null when extraction was not capped, or when it stopped because the container could not be read rather than because a bound fired. + */ + extracted_media_limit?: number | null; /** * Id * @description Unique identifier for the content version. @@ -7911,9 +8932,14 @@ export interface components { routers__api__contents__FileUploadResponse: { /** * Content Version Id - * @description ID of the content version being replaced + * @description ID of the newly created content version. A replacement creates a new version rather than overwriting the previous one. */ content_version_id: string | null; + /** + * Embedder Warning + * @description Set when the file's type is not embedded directly on this source, so indexing relies on extracted text. Content with none (e.g. a photograph) will be marked FAILED. + */ + embedder_warning?: string | null; /** * Filename * @description Original filename @@ -7921,12 +8947,12 @@ export interface components { filename: string; /** * Source Connection Content Version Id - * @description ID of the source connection content version + * @description ID of the source connection content version. Unchanged by a replacement, so it stays a stable handle for the content. */ source_connection_content_version_id: string | null; /** * Status - * @description Processing status + * @description Always `uploaded`. Unlike the create endpoints, a replacement is never rejected as a duplicate of another item. */ status: string; }; @@ -8127,6 +9153,7 @@ export interface components { deprecated_at?: string | null; /** Description */ description: string; + effort_options?: components["schemas"]["EffortOptionsResponse"] | null; /** Family */ family?: string | null; /** Family Generation */ @@ -8570,7 +9597,7 @@ export interface components { routers__api__sources__FileUploadResponse: { /** * Content Version Id - * @description ID of the created content version + * @description ID of the created content version, and what the source content status endpoints take. Set when `status` is `uploaded`; `null` when `status` is `duplicate`, because no new version was created. */ content_version_id: string | null; /** @@ -8585,12 +9612,12 @@ export interface components { filename: string; /** * Source Connection Content Version Id - * @description ID of the duplicate source connection content version + * @description ID of the existing, already-indexed item this file duplicates, and what `GET /contents/{id}` takes. Set only when `status` is `duplicate`; `null` on a new upload, which has no such id until it finishes indexing. */ source_connection_content_version_id: string | null; /** * Status - * @description Processing status + * @description `uploaded` for a new item, or `duplicate` when this exact file is already on the source. */ status: string; }; @@ -8608,12 +9635,20 @@ export interface components { * @description Response model for prompt model data */ schemas__model_responses__PromptModelResponse: { + /** + * Chat Capable + * @description Whether this model can serve a chat request (`prompt_call`, `extract_data`). True for every plain text LLM, and for a dual-capability model that generates media AND holds a conversation; false for a dedicated generator (Imagen, Veo, a TTS voice), which bills per produced unit and has no chat interface. Authoritative: consumers must read this rather than inferring it from `generation_params` or `supported_output_media`, because the answer also depends on which inference interface serves the model — something no response field exposes. + * @default true + */ + chat_capable: boolean; /** Default */ default: boolean; /** Deprecated At */ deprecated_at?: string | null; /** Description */ description: string; + /** @description The reasoning-effort values a prompt_call or extract_data step may set as `effort` with this model. Null when the model takes none. */ + effort_options?: components["schemas"]["EffortOptionsResponse"] | null; /** Enabled */ enabled: boolean; /** Family */ @@ -8622,12 +9657,19 @@ export interface components { family_generation?: number | null; /** * Generation Credits Per Unit - * @description Per-unit credit cost for a dedicated media-generation model, in the unit named by ``generation_params.pricing_unit`` (per image / per second / per character / per output token). Multiply by the produced unit count (images, seconds, characters) for the run cost. None for token-billed (non-generation) models. + * @description Per-unit credit cost for a dedicated media-generation model, in the unit named by ``generation_params.pricing_unit`` (per image / per second / per character / per output token). Multiply by the produced unit count (images, seconds, characters) for the run cost. None for models with no generation descriptor. This rate applies when the model is used in a generate_image/audio/video step; a model that also serves the chat path is billed per token there instead, using the input/output token rates on this same record. When `generation_params.price_varies_by` is set the model has one rate per value of that option and this is the **highest** of them — read `generation_credits_per_variant` for the real spread rather than presenting this as the price. */ generation_credits_per_unit?: number | null; + /** + * Generation Credits Per Variant + * @description Per-unit credit cost keyed by the value of the option named in `generation_params.price_varies_by` (e.g. `{'720p': 1330, '1080p': 1995}`). None for a model with a single rate, where `generation_credits_per_unit` already describes it exactly. + */ + generation_credits_per_variant?: { + [key: string]: number; + } | null; /** * Generation Params - * @description Media-generation descriptor (modality, pricing_unit, and modality-specific constraints). NULL for text LLMs; present for image/audio/video generation models. See schemas.generation_params. + * @description Media-generation descriptor (modality, pricing_unit, and modality-specific constraints). NULL for text LLMs; present for image/audio/video generation models. See schemas.generation_params. A present descriptor does NOT imply the model is generation-only: some models serve both paths (they generate media AND hold a chat conversation). Read `chat_capable` to tell whether a model with a descriptor can also be used as a chat model — do not branch on this field being non-null alone, and do not re-derive the answer from `supported_output_media`. */ generation_params?: { [key: string]: unknown; @@ -8644,11 +9686,25 @@ export interface components { * @description Per-image credit cost of using the built-in image_generation tool (it runs gpt-image-1). Set only for models that actually support the tool (tool-use capable); None otherwise. */ image_generation_tool_credits_per_image?: number | null; - /** Input 1H Cache Write Credits Per 1000 Tokens */ + /** + * Input 1H Cache Write Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens written to a 1-hour prompt cache. + */ input_1h_cache_write_credits_per_1000_tokens?: number | null; - /** Input 5M Cache Write Credits Per 1000 Tokens */ + /** + * Input 30M Cache Write Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens written to a 30-minute prompt cache. + */ + input_30m_cache_write_credits_per_1000_tokens?: number | null; + /** + * Input 5M Cache Write Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens written to a 5-minute prompt cache. + */ input_5m_cache_write_credits_per_1000_tokens?: number | null; - /** Input Cache Hit Credits Per 1000 Tokens */ + /** + * Input Cache Hit Credits Per 1000 Tokens + * @description Credits per 1,000 input tokens read from a prompt cache. + */ input_cache_hit_credits_per_1000_tokens?: number | null; /** Input Credits Per 1000 Tokens */ input_credits_per_1000_tokens?: number | null; @@ -8849,6 +9905,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_agent_api_agents_post: { @@ -8894,6 +9961,17 @@ export interface operations { "application/json": components["schemas"]["AgentDefinitionImportErrorResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_agent_email_optouts_api_api_agents_agent_email_optouts_get: { @@ -8933,6 +10011,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; remove_agent_email_optout_api_api_agents_agent_email_optouts__optout_id__delete: { @@ -8967,6 +10056,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_blocked_email_senders_api_api_agents_blocked_email_senders_get: { @@ -9004,6 +10104,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; block_email_sender_api_api_agents_blocked_email_senders_post: { @@ -9042,6 +10153,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; set_auto_block_mode_api_api_agents_blocked_email_senders_mode_put: { @@ -9080,6 +10202,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; unblock_email_sender_api_api_agents_blocked_email_senders__blocked_id__delete: { @@ -9114,6 +10247,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__get: { @@ -9150,6 +10294,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__delete: { @@ -9184,6 +10339,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_evaluation_criteria_api_agents_evaluation_criteria__criteria_id__patch: { @@ -9224,6 +10390,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_compatible_runs_api_agents_evaluation_criteria__criteria_id__compatible_runs_get: { @@ -9264,6 +10441,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_evaluation_results_api_agents_evaluation_criteria__criteria_id__results_get: { @@ -9307,6 +10495,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_evaluation_result_api_agents_evaluation_criteria__criteria_id__results_post: { @@ -9347,6 +10546,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_evaluation_summary_api_agents_evaluation_criteria__criteria_id__summary_get: { @@ -9383,6 +10593,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_non_manual_evaluation_summary_api_agents_evaluation_results_non_manual_summary_get: { @@ -9423,6 +10644,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_inbound_email_rejections_api_api_agents_inbound_email_rejections_get: { @@ -9461,9 +10693,20 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; - }; - }; - get_inbound_email_status_api_api_agents_inbound_email_status_get: { + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + get_inbound_email_status_api_api_agents_inbound_email_status_get: { parameters: { query?: never; header?: { @@ -9486,6 +10729,17 @@ export interface operations { "application/json": components["schemas"]["InboundEmailStatusResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; cancel_queued_email_runs_api_api_agents_inbound_email_status_cancel_queued_post: { @@ -9511,6 +10765,17 @@ export interface operations { "application/json": components["schemas"]["CancelQueuedRunsResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; resume_inbound_email_api_api_agents_inbound_email_status_resume_post: { @@ -9536,6 +10801,17 @@ export interface operations { "application/json": components["schemas"]["ResumeInboundResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; preview_import_agent_api_agents_preview_import_post: { @@ -9574,6 +10850,17 @@ export interface operations { "application/json": components["schemas"]["AgentDefinitionImportErrorResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; search_agent_runs_api_agents_runs_search_post: { @@ -9612,6 +10899,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_agent_run_api_agents_runs__run_id__get: { @@ -9651,6 +10949,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_agent_run_api_agents_runs__run_id__delete: { @@ -9687,6 +10996,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_agent_metadata_api_agents__agent_id__get: { @@ -9723,6 +11043,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_agent_api_agents__agent_id__put: { @@ -9763,6 +11094,17 @@ export interface operations { "application/json": components["schemas"]["AgentDefinitionImportErrorResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_agent_api_agents__agent_id__delete: { @@ -9797,6 +11139,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_ai_conversation_history_api_agents__agent_id__ai_assistant_conversations_get: { @@ -9842,6 +11195,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; generate_agent_steps_api_agents__agent_id__ai_assistant_generate_steps_post: { @@ -9882,6 +11246,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; generate_step_config_api_agents__agent_id__ai_assistant_step_config_post: { @@ -9922,6 +11297,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; mark_ai_suggestion_api_agents__agent_id__ai_assistant__conversation_id__patch: { @@ -9963,6 +11349,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_get_agent_attachment_references_api_agents__agent_id__attachment_references_get: { @@ -9999,6 +11396,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_agent_callers_api_api_agents__agent_id__callers_get: { @@ -10035,6 +11443,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_agent_definition_api_agents__agent_id__definition_get: { @@ -10071,6 +11490,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_agent_definition_api_agents__agent_id__definition_put: { @@ -10111,6 +11541,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; disable_agent_api_api_agents__agent_id__disable_post: { @@ -10147,6 +11588,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; enable_agent_api_api_agents__agent_id__enable_post: { @@ -10183,6 +11635,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_evaluation_criteria_api_agents__agent_id__evaluation_criteria_get: { @@ -10222,6 +11685,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_evaluation_criteria_api_agents__agent_id__evaluation_criteria_post: { @@ -10262,6 +11736,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; test_draft_evaluation_api_agents__agent_id__evaluation_criteria_test_draft_post: { @@ -10302,6 +11787,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_agent_evaluation_results_api_agents__agent_id__evaluation_results_get: { @@ -10346,6 +11842,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_evaluation_runs_api_agents__agent_id__evaluation_runs_get: { @@ -10389,6 +11896,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; export_agent_api_agents__agent_id__export_get: { @@ -10428,6 +11946,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_get_agent_input_upload_status_api_agents__agent_id__input_uploads__upload_id__get: { @@ -10465,6 +11994,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_agent_runs_api_agents__agent_id__runs_get: { @@ -10508,6 +12048,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; run_agent_api_agents__agent_id__runs_post: { @@ -10557,6 +12108,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; run_streaming_agent_api_agents__agent_id__runs_stream_post: { @@ -10624,6 +12186,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_run_evaluation_results_api_agents__agent_id__runs__run_id__evaluation_results_get: { @@ -10664,6 +12237,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; set_email_trigger_config_api_api_agents__agent_id__triggers__trigger_id__email_config_put: { @@ -10705,6 +12289,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_upload_agent_input_api_agents__agent_id__upload_input_post: { @@ -10741,6 +12336,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_feedback_api_ai_assistant_feedback_post: { @@ -10779,6 +12385,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_knowledge_base_api_ai_assistant_knowledge_base_post: { @@ -10817,6 +12434,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_memory_bank_api_ai_assistant_memory_bank_post: { @@ -10855,6 +12483,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_memory_bank_history_api_ai_assistant_memory_bank_last_conversation_get: { @@ -10894,6 +12533,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_memory_bank_accept_api_ai_assistant_memory_bank__conversation_id__patch: { @@ -10934,6 +12584,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_solution_api_ai_assistant_solution_post: { @@ -10972,6 +12633,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_source_api_ai_assistant_source_post: { @@ -11010,6 +12682,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_accept_api_ai_assistant__conversation_id__accept_post: { @@ -11050,6 +12733,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; api_ai_decline_api_ai_assistant__conversation_id__decline_post: { @@ -11084,7 +12778,18 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; - }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; }; list_alerts_api_alerts_get: { parameters: { @@ -11133,6 +12838,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_alert_configs_api_alerts_configs_get: { @@ -11178,6 +12894,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_alert_config_api_alerts_configs_post: { @@ -11216,6 +12943,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_alert_config_api_alerts_configs__config_id__get: { @@ -11252,6 +12990,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_alert_config_api_alerts_configs__config_id__delete: { @@ -11286,6 +13035,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_alert_config_api_alerts_configs__config_id__patch: { @@ -11326,6 +13086,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_organization_preferences_api_alerts_organization_preferences_list_get: { @@ -11365,6 +13136,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_organization_preference_api_alerts_organization_preferences__organization_id___alert_type__patch: { @@ -11406,6 +13188,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_alert_detail_api_alerts__alert_id__get: { @@ -11442,6 +13235,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; add_alert_comment_api_alerts__alert_id__comments_post: { @@ -11482,6 +13286,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; change_alert_status_api_alerts__alert_id__status_post: { @@ -11522,6 +13337,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; subscribe_to_alert_api_alerts__alert_id__subscribe_post: { @@ -11558,6 +13384,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; unsubscribe_from_alert_api_alerts__alert_id__unsubscribe_post: { @@ -11594,6 +13431,377 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + list_cloud_drives_api_api_cloud_drives_get: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CloudDriveResponseModel"][]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + list_cloud_drive_providers_api_api_cloud_drives_providers_get: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CloudDriveProviderResponseModel"][]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + get_cloud_drive_api_api_cloud_drives__connection_id__get: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CloudDriveResponseModel"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + delete_cloud_drive_api_api_cloud_drives__connection_id__delete: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OkResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + update_cloud_drive_api_api_cloud_drives__connection_id__patch: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + connection_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CloudDriveUpdateRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CloudDriveResponseModel"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + get_agents_using_cloud_drive_api_api_cloud_drives__connection_id__agents_get: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AgentUsingCloudDriveResponseModel"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + disconnect_cloud_drive_api_api_cloud_drives__connection_id__disconnect_post: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CloudDriveResponseModel"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + list_cloud_drive_rejections_api_api_cloud_drives__connection_id__rejections_get: { + parameters: { + query?: { + limit?: number; + }; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CloudDriveRejectionResponseModel"][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_content_detail_api_contents__source_connection_content_version__get: { @@ -11630,7 +13838,18 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["HTTPValidationError"]; + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; }; }; }; @@ -11664,6 +13883,13 @@ export interface operations { "application/json": components["schemas"]["routers__api__contents__FileUploadResponse"]; }; }; + /** @description The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -11673,6 +13899,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_content_api_contents__source_connection_content_version__delete: { @@ -11698,6 +13935,13 @@ export interface operations { }; content?: never; }; + /** @description The key's user is a member of the account but not an owner or administrator (`error.code` is `permission_denied`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -11707,6 +13951,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_content_embeddings_api_contents__source_connection_content_version__embeddings_get: { @@ -11746,6 +14001,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; upload_file_to_content_api_contents__source_connection_content_version__upload_post: { @@ -11777,6 +14043,13 @@ export interface operations { "application/json": components["schemas"]["routers__api__contents__FileUploadResponse"]; }; }; + /** @description The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -11786,6 +14059,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; docs_search_api_docs_search_get: { @@ -11827,6 +14111,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_email_domains_api_api_email_domains_get: { @@ -11852,6 +14147,17 @@ export interface operations { "application/json": components["schemas"]["EmailDomainsListResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; add_email_domain_api_api_email_domains_post: { @@ -11890,6 +14196,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; use_shared_domain_api_api_email_domains_use_shared_domain_post: { @@ -11913,6 +14230,17 @@ export interface operations { }; content?: never; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; remove_email_domain_api_api_email_domains__domain_id__delete: { @@ -11949,6 +14277,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_dmarc_summary_api_api_email_domains__domain_id__dmarc_get: { @@ -11988,6 +14327,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; set_primary_email_domain_api_api_email_domains__domain_id__primary_post: { @@ -12024,6 +14374,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; send_test_email_api_api_email_domains__domain_id__test_email_post: { @@ -12060,6 +14421,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; verify_email_domain_api_api_email_domains__domain_id__verify_post: { @@ -12096,6 +14468,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; governance_ai_generate_api_governance_ai_assistant_post: { @@ -12148,6 +14531,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_governance_ai_conversations_api_governance_ai_assistant_conversations_get: { @@ -12192,6 +14586,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; governance_ai_accept_api_governance_ai_assistant__conversation_id__accept_post: { @@ -12242,6 +14647,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; governance_ai_decline_api_governance_ai_assistant__conversation_id__decline_post: { @@ -12290,6 +14706,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_knowledge_bases_api_knowledge_bases_get: { @@ -12333,6 +14760,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_knowledge_base_api_knowledge_bases_post: { @@ -12378,6 +14816,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_knowledge_base_api_knowledge_bases__knowledge_base_id__get: { @@ -12414,6 +14863,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_knowledge_base_api_knowledge_bases__knowledge_base_id__put: { @@ -12454,6 +14914,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_knowledge_base_api_knowledge_bases__knowledge_base_id__delete: { @@ -12488,6 +14959,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_me_api_me_get: { @@ -12513,6 +14995,17 @@ export interface operations { "application/json": components["schemas"]["MeResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_memory_banks_api_memory_banks_get: { @@ -12558,6 +15051,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_memory_bank_api_memory_banks_post: { @@ -12596,6 +15100,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; memory_bank_ai_generate_api_memory_banks_ai_assistant_post: { @@ -12641,6 +15156,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; memory_bank_ai_last_conversation_api_memory_banks_ai_assistant_last_conversation_get: { @@ -12680,6 +15206,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; memory_bank_ai_accept_api_memory_banks_ai_assistant__conversation_id__patch: { @@ -12720,6 +15257,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_templates_api_memory_banks_templates_get: { @@ -12745,6 +15293,17 @@ export interface operations { "application/json": unknown; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; test_compaction_prompt_standalone_api_memory_banks_test_compaction_post: { @@ -12783,6 +15342,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_memory_bank_api_memory_banks__memory_bank_id__get: { @@ -12819,6 +15389,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_memory_bank_api_memory_banks__memory_bank_id__put: { @@ -12859,6 +15440,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_memory_bank_api_memory_banks__memory_bank_id__delete: { @@ -12893,6 +15485,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_agents_using_bank_api_memory_banks__memory_bank_id__agents_get: { @@ -12929,6 +15532,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; compact_memory_bank_api_memory_banks__memory_bank_id__compact_post: { @@ -12965,6 +15579,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_memory_bank_source_api_memory_banks__memory_bank_id__source_delete: { @@ -12999,6 +15624,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_memory_bank_entry_stats_api_memory_banks__memory_bank_id__stats_get: { @@ -13041,6 +15677,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; test_compaction_prompt_api_memory_banks__memory_bank_id__test_compaction_post: { @@ -13081,6 +15728,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_models_api_models_get: { @@ -13117,13 +15775,24 @@ export interface operations { "application/json": components["schemas"]["schemas__model_responses__ProviderGroupResponse"][]; }; }; - /** @description Validation Error */ - 422: { + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; [name: string]: unknown; }; content: { - "application/json": components["schemas"]["HTTPValidationError"]; + "application/json": components["schemas"]["ServiceUnavailableError"]; }; }; }; @@ -13169,6 +15838,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; mark_all_read_api_models_alerts_mark_all_read_post: { @@ -13192,6 +15872,17 @@ export interface operations { }; content?: never; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_alert_unread_count_api_models_alerts_unread_count_get: { @@ -13217,6 +15908,17 @@ export interface operations { "application/json": components["schemas"]["UnreadCountResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; mark_read_api_models_alerts__alert_id__read_patch: { @@ -13251,6 +15953,65 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + list_embedding_models_api_models_embedders_get: { + parameters: { + query?: { + /** @description Filter to embedders that can index this input modality — a coarse kind (text, image, video, audio) or a full MIME. */ + supports_input_media?: string | null; + }; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EmbeddingModelListResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_generation_tiers_api_models_generation_tiers_get: { @@ -13276,6 +16037,17 @@ export interface operations { "application/json": components["schemas"]["GenerationTierListResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_experiments_api_models_playground_experiments_get: { @@ -13321,6 +16093,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_experiment_api_models_playground_experiments_post: { @@ -13359,6 +16142,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_experiment_api_models_playground_experiments__experiment_id__get: { @@ -13395,6 +16189,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_experiment_endpoint_api_models_playground_experiments__experiment_id__delete: { @@ -13429,6 +16234,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; cancel_experiment_endpoint_api_models_playground_experiments__experiment_id__cancel_post: { @@ -13465,6 +16281,53 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + list_reranker_models_api_models_rerankers_get: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["RerankerModelListResponse"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_model_api_models__model_id__details_get: { @@ -13501,6 +16364,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_recommendations_api_models__model_id__recommendations_get: { @@ -13548,6 +16422,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; search_api_search_get: { @@ -13589,6 +16474,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_solutions_api_solutions_get: { @@ -13634,6 +16530,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_solution_api_solutions_post: { @@ -13672,6 +16579,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_solution_api_solutions__solution_id__get: { @@ -13708,6 +16626,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_solution_api_solutions__solution_id__delete: { @@ -13742,6 +16671,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_solution_api_solutions__solution_id__patch: { @@ -13782,6 +16722,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; link_agents_api_solutions__solution_id__agents_post: { @@ -13822,6 +16773,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; unlink_agents_api_solutions__solution_id__agents_delete: { @@ -13862,6 +16824,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; ai_assistant_generate_api_solutions__solution_id__ai_assistant_generate_post: { @@ -13902,6 +16875,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; ai_assistant_knowledge_base_api_solutions__solution_id__ai_assistant_knowledge_base_post: { @@ -13942,6 +16926,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; ai_assistant_source_api_solutions__solution_id__ai_assistant_source_post: { @@ -13982,6 +16977,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; ai_assistant_accept_api_solutions__solution_id__ai_assistant__conversation_id__accept_post: { @@ -14023,6 +17029,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; ai_assistant_decline_api_solutions__solution_id__ai_assistant__conversation_id__decline_post: { @@ -14058,6 +17075,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_conversations_api_solutions__solution_id__conversations_get: { @@ -14094,6 +17122,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; add_conversation_turn_api_solutions__solution_id__conversations_post: { @@ -14134,6 +17173,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; mark_conversation_turn_api_solutions__solution_id__conversations__conversation_id__patch: { @@ -14173,6 +17223,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; link_knowledge_bases_api_solutions__solution_id__knowledge_bases_post: { @@ -14213,6 +17274,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; unlink_knowledge_bases_api_solutions__solution_id__knowledge_bases_delete: { @@ -14241,16 +17313,27 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["routers__api__solutions__SolutionResponse"]; + "application/json": components["schemas"]["routers__api__solutions__SolutionResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; }; }; - /** @description Validation Error */ - 422: { + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; [name: string]: unknown; }; content: { - "application/json": components["schemas"]["HTTPValidationError"]; + "application/json": components["schemas"]["ServiceUnavailableError"]; }; }; }; @@ -14293,6 +17376,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; unlink_source_connections_api_solutions__solution_id__source_connections_delete: { @@ -14333,6 +17427,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_sources_api_sources_get: { @@ -14378,6 +17483,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_source_api_sources_post: { @@ -14423,6 +17539,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_source_api_sources__source_connection_id__get: { @@ -14459,6 +17586,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_source_api_sources__source_connection_id__put: { @@ -14499,6 +17637,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; upload_inline_text_to_source_api_sources__source_connection_id__post: { @@ -14530,6 +17679,13 @@ export interface operations { "application/json": components["schemas"]["routers__api__sources__FileUploadResponse"]; }; }; + /** @description The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -14539,6 +17695,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_source_api_sources__source_connection_id__delete: { @@ -14573,6 +17740,125 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + list_source_contents_api_sources__source_connection_id__contents_get: { + parameters: { + query?: { + /** @description Page number */ + page?: number; + /** @description Items per page */ + limit?: number; + /** @description Sort field (created_at/title/status) */ + sort?: string; + /** @description Sort order */ + order?: string; + /** @description Filter to one status: pending, fetching, transcribing, scanning, indexing, completed, or failed. Use `failed` to list only the items that could not be indexed. */ + status?: string | null; + /** @description Filter to specific content versions, repeatable. Pass the `content_version_id` values returned by the upload endpoints to poll exactly the items you uploaded in a single request. The ids travel in the query string, so keep a request to about 100: a URL longer than 8,192 bytes is rejected before it reaches the API. The API itself accepts at most 500 — beyond either limit, split the poll or page through the unfiltered listing. */ + content_version_id?: string[] | null; + }; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + source_connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SourceContentStatusListResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; + }; + }; + get_source_content_status_endpoint_api_sources__source_connection_id__contents__content_version_id__get: { + parameters: { + query?: never; + header?: { + /** @description Target a different organization account (OAuth only). When omitted, the user's default account is used. Ignored for API key authentication — the key's account is always used. */ + "X-Account-Id"?: components["parameters"]["X-Account-Id"]; + /** @description Opt into dated, backward-incompatible API changes (format YYYY-MM-DD). When omitted, the account's pinned baseline version is used and responses keep their legacy shapes. Send a date on or after a change's release to adopt it — e.g. `2026-07-27` enables rejection of undeclared query parameters (422) and the canonical `{data, pagination}` envelope (pagination = `{page, limit, total, pages, has_next, has_prev}`) on every list endpoint that previously returned a bare array, a flat `{data, total, page, limit}`, a `{configs, total}`, or another per-resource key. */ + "Seclai-Version"?: components["parameters"]["Seclai-Version"]; + }; + path: { + source_connection_id: string; + content_version_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SourceContentStatusResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_source_embedding_migration_api_sources__source_connection_id__embedding_migration_get: { @@ -14609,6 +17895,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; start_source_embedding_migration_api_sources__source_connection_id__embedding_migration_post: { @@ -14656,6 +17953,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; cancel_source_embedding_migration_api_sources__source_connection_id__embedding_migration_cancel_post: { @@ -14692,6 +18000,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; list_source_exports_api_sources__source_connection_id__exports_get: { @@ -14731,6 +18050,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; create_source_export_api_sources__source_connection_id__exports_post: { @@ -14762,6 +18092,13 @@ export interface operations { "application/json": components["schemas"]["routers__api__source_exports__ExportResponse"]; }; }; + /** @description The key's user is not an owner or administrator of the organization account (`error.code` is `permission_denied`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -14771,6 +18108,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; estimate_source_export_api_sources__source_connection_id__exports_estimate_post: { @@ -14811,6 +18159,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_source_export_api_sources__source_connection_id__exports__export_id__get: { @@ -14848,6 +18207,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; delete_source_export_api_sources__source_connection_id__exports__export_id__delete: { @@ -14874,6 +18244,13 @@ export interface operations { }; content?: never; }; + /** @description The key's user is not an owner or administrator of the organization account (`error.code` is `permission_denied`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -14883,6 +18260,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; cancel_source_export_api_sources__source_connection_id__exports__export_id__cancel_post: { @@ -14911,6 +18299,13 @@ export interface operations { "application/json": components["schemas"]["routers__api__source_exports__ExportResponse"]; }; }; + /** @description The key's user is not an owner or administrator of the organization account (`error.code` is `permission_denied`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -14920,6 +18315,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; download_source_export_api_sources__source_connection_id__exports__export_id__download_get: { @@ -14957,6 +18363,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; upload_file_to_source_api_sources__source_connection_id__upload_post: { @@ -14988,6 +18405,13 @@ export interface operations { "application/json": components["schemas"]["routers__api__sources__FileUploadResponse"]; }; }; + /** @description The key's user is not an owner or administrator of the account (`error.code` is `permission_denied`), or the account is suspended (`suspended_account`). */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; /** @description Validation Error */ 422: { headers: { @@ -14997,6 +18421,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; serve_agent_run_attachment_api_v2_agent_runs__run_id__attachments__attachment_id__get: { @@ -15042,6 +18477,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; get_api_version_api_version_get: { @@ -15067,6 +18513,17 @@ export interface operations { "application/json": components["schemas"]["ApiVersionResponse"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; update_api_version_api_version_put: { @@ -15105,6 +18562,17 @@ export interface operations { "application/json": components["schemas"]["HTTPValidationError"]; }; }; + /** @description A dependency is unavailable. `database_unavailable` is temporary (for example routine maintenance) and carries a `Retry-After` header, after which the request can be retried unchanged. `vector_store_unavailable` means the vector store backing an embeddings operation is not configured; it carries no `Retry-After` because it does not clear without an operator. */ + 503: { + headers: { + /** @description Seconds to wait before retrying. Sent only with `database_unavailable`. */ + "Retry-After"?: number; + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ServiceUnavailableError"]; + }; + }; }; }; } diff --git a/src/types.ts b/src/types.ts index 00621aa..ad0004b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -148,6 +148,9 @@ export type AgentRunStepResponse = components["schemas"]["AgentRunStepResponse"] /** Details of a single attempt within an agent run step. */ export type AgentRunAttemptResponse = components["schemas"]["AgentRunAttemptResponse"]; +/** A file a run or step produced or received (within `attachments`). */ +export type AgentRunFileResponse = components["schemas"]["AgentRunFileResponse"]; + /** A single LLM tool call made during a `prompt_call` step (within {@link AgentRunStepResponse}'s `tool_calls`). */ export type AgentRunToolCallResponse = components["schemas"]["AgentRunToolCallResponse"]; @@ -462,6 +465,47 @@ export type InlineTextUploadRequest = components["schemas"]["InlineTextUploadReq /** Request body for replacing content with inline text. */ export type InlineTextReplaceRequest = components["schemas"]["InlineTextReplaceRequest"]; +/** One content item's indexing status within a source. */ +export type SourceContentStatusResponse = components["schemas"]["SourceContentStatusResponse"]; + +/** Paginated list of a source's content items and their indexing status. */ +export type SourceContentStatusListResponse = components["schemas"]["SourceContentStatusListResponse"]; + +/** Filters for {@link Seclai.listSourceContents}. */ +export interface ListSourceContentsOptions extends SortableListOptions { + /** Keep only one status: pending, fetching, transcribing, scanning, indexing, completed or failed. */ + status?: string; + /** + * Keep only these items — the `content_version_id` values the upload methods + * return. Keep it to about 100: the ids travel in the query string, and a URL + * over 8,192 bytes is rejected with a 414. The API itself accepts at most 500. + */ + contentVersionIds?: string[]; +} + +// ─── Cloud Drives ──────────────────────────────────────────────────────────── + +/** A cloud-drive provider this deployment has configured. */ +export type CloudDriveProviderResponse = components["schemas"]["CloudDriveProviderResponseModel"]; + +/** An OAuth scope a {@link CloudDriveProviderResponse} can request. */ +export type CloudDriveScopeResponse = components["schemas"]["CloudDriveScopeResponseModel"]; + +/** An access level a {@link CloudDriveProviderResponse} offers. */ +export type CloudDriveAccessLevelResponse = components["schemas"]["CloudDriveAccessLevelResponseModel"]; + +/** A cloud-drive connection. */ +export type CloudDriveResponse = components["schemas"]["CloudDriveResponseModel"]; + +/** Request body for updating a cloud-drive connection. */ +export type CloudDriveUpdateRequest = components["schemas"]["CloudDriveUpdateRequest"]; + +/** An agent that uses a cloud-drive connection. */ +export type AgentUsingCloudDriveResponse = components["schemas"]["AgentUsingCloudDriveResponseModel"]; + +/** A file a cloud-drive connection skipped, and why. */ +export type CloudDriveRejectionResponse = components["schemas"]["CloudDriveRejectionResponseModel"]; + // ─── Source Exports ────────────────────────────────────────────────────────── /** Paginated list of source exports. */ @@ -633,6 +677,27 @@ export type PromptToolResponse = components["schemas"]["PromptToolResponse"]; /** Per-modality rate for a model that prices image/audio/video distinctly from its default text rate. */ export type ModalityRateResponse = components["schemas"]["ModalityRateResponse"]; +/** The effort levels a model accepts, and its default. */ +export type EffortOptionsResponse = components["schemas"]["EffortOptionsResponse"]; + +/** An embedding model a source can index with. */ +export type EmbeddingModelResponse = components["schemas"]["EmbeddingModelResponse"]; + +/** The embedding models, with the defaults and pricing that apply to all of them. */ +export type EmbeddingModelListResponse = components["schemas"]["EmbeddingModelListResponse"]; + +/** Per-modality rate for an embedding model. */ +export type EmbeddingModalityRateResponse = components["schemas"]["EmbeddingModalityRateResponse"]; + +/** Storage credits for one embedding dimension. */ +export type EmbeddingStorageCreditsResponse = components["schemas"]["EmbeddingStorageCreditsResponse"]; + +/** A reranker model a knowledge base can use. */ +export type RerankerModelResponse = components["schemas"]["RerankerModelResponse"]; + +/** The reranker models, with the default and pricing that apply to all of them. */ +export type RerankerModelListResponse = components["schemas"]["RerankerModelListResponse"]; + /** Variant category for model pricing tiers. */ export type VariantCategoryResponse = components["schemas"]["VariantCategoryResponse"]; diff --git a/src/versions.ts b/src/versions.ts index 12900d0..98914ad 100644 --- a/src/versions.ts +++ b/src/versions.ts @@ -11,10 +11,15 @@ export const SeclaiApiVersion = { V2026_07_01: "2026-07-01", V2026_07_27: "2026-07-27", + V2026_08_03: "2026-08-03", + V2026_08_21: "2026-08-21", + V2026_09_28: "2026-09-28", + V2026_09_30: "2026-09-30", + V2026_10_03: "2026-10-03", /** Baseline applied to an unpinned, header-less caller. */ Default: "2026-07-01", /** Newest version known to this SDK release. May lag the server. */ - Latest: "2026-07-27", + Latest: "2026-10-03", } as const; /** diff --git a/tests/client.test.ts b/tests/client.test.ts index bf354de..d117510 100644 --- a/tests/client.test.ts +++ b/tests/client.test.ts @@ -1212,9 +1212,140 @@ describe("Search", () => { // ───────────────────────────────────────────────────────────────────────────── describe("Pagination Helper", () => { - test("paginate yields items across multiple pages", async () => { + const pageOf = (page: number, pages: number, limit: number, total: number) => ({ + page, + limit, + total, + pages, + has_next: page < pages, + has_prev: page > 1, + }); + + // Two full-envelope pages, as the server sends them, then nothing more. + function twoPageClient(path: string, seen: string[]) { + return makeClient((req) => { + const url = new URL(req.url); + expect(url.pathname).toBe(path); + seen.push(url.search); + const page = Number(url.searchParams.get("page")); + return jsonResponse({ + data: page === 1 ? [{ id: "a" }, { id: "b" }] : [{ id: "c" }], + pagination: pageOf(page, 2, 2, 3), + }); + }); + } + + test("paginate walks listSources and stops after the last page", async () => { + const seen: string[] = []; + const client = twoPageClient("/sources", seen); + const ids: string[] = []; + for await (const source of client.paginate((opts) => client.listSources(opts), { limit: 2 })) { + ids.push(source.id); + } + expect(ids).toEqual(["a", "b", "c"]); + expect(seen).toEqual(["?page=1&limit=2", "?page=2&limit=2"]); + }); + + test("paginate walks listAgents and stops after the last page", async () => { + const seen: string[] = []; + const client = twoPageClient("/agents", seen); + const ids: string[] = []; + for await (const agent of client.paginate((opts) => client.listAgents(opts), { limit: 2 })) { + ids.push(agent.id); + } + expect(ids).toEqual(["a", "b", "c"]); + expect(seen).toEqual(["?page=1&limit=2", "?page=2&limit=2"]); + }); + + // The four evaluation listings answer `{data, total, page, limit}` with no + // `pagination` key unless the client opts into 2026-07-27. + test.each([ + { total: 3, requests: 2, ids: ["p1a", "p1b", "p2a"] }, + { total: 4, requests: 2, ids: ["p1a", "p1b", "p2a", "p2b"] }, + { total: 2, requests: 1, ids: ["p1a", "p1b"] }, + ])("paginate walks a flat-shaped listing of $total", async ({ total, requests, ids }) => { + const seen: string[] = []; + const client = makeClient((req) => { + const url = new URL(req.url); + expect(url.pathname).toBe("/agents/evaluation-criteria/c1/results"); + seen.push(url.search); + const page = Number(url.searchParams.get("page")); + const all = [`p${page}a`, `p${page}b`].map((id) => ({ id })); + return jsonResponse({ data: all.slice(0, total - (page - 1) * 2), total, page, limit: 2 }); + }); + const got: string[] = []; + for await (const result of client.paginate((opts) => client.listEvaluationResults("c1", opts), { + limit: 2, + })) { + got.push(result.id); + } + expect(got).toEqual(ids); + expect(seen).toHaveLength(requests); + }); + + test("paginate stops on a flat-shaped listing whose server ignores page", async () => { + let calls = 0; + const client = makeClient(() => { + calls++; + return jsonResponse({ data: [{ id: "a" }, { id: "b" }], total: 3, page: 1, limit: 2 }); + }); + const got: string[] = []; + for await (const result of client.paginate((opts) => client.listEvaluationResults("c1", opts), { + limit: 2, + })) { + got.push(result.id); + } + expect(calls).toBe(2); + }); + + test("paginate makes one request for a single full page", async () => { + let requests = 0; + const client = makeClient(() => { + requests += 1; + return jsonResponse({ data: [{ id: "a" }, { id: "b" }], pagination: pageOf(1, 1, 2, 2) }); + }); + const ids: string[] = []; + for await (const source of client.paginate((opts) => client.listSources(opts), { limit: 2 })) { + ids.push(source.id); + } + expect(ids).toEqual(["a", "b"]); + expect(requests).toBe(1); + }); + + test("paginate follows pages when has_next is absent", async () => { + const client = makeClient(() => jsonResponse({})); + let fetched = 0; + const items: string[] = []; + for await (const item of client.paginate( + async ({ page }) => { + fetched += 1; + return { data: page === 1 ? ["a", "b"] : ["c"], pagination: { pages: 2 } }; + }, + { limit: 2 }, + )) { + items.push(item); + } + expect(items).toEqual(["a", "b", "c"]); + expect(fetched).toBe(2); + }); + + test("paginate yields a bare array once", async () => { + let requests = 0; + const client = makeClient(() => { + requests += 1; + return jsonResponse([{ id: "p1" }, { id: "p2" }]); + }); + const ids: string[] = []; + for await (const drive of client.paginate(() => client.listCloudDrives(), { limit: 2 })) { + ids.push(drive.id); + } + expect(ids).toEqual(["p1", "p2"]); + expect(requests).toBe(1); + }); + + test("paginate still accepts a custom fetcher's items and total_pages", async () => { let pagesFetched = 0; - const client = makeClient(() => jsonResponse({})); // unused in this test + const client = makeClient(() => jsonResponse({})); const allItems: string[] = []; for await (const item of client.paginate( @@ -1234,17 +1365,26 @@ describe("Pagination Helper", () => { expect(pagesFetched).toBe(2); }); - test("paginate stops on single page", async () => { + test("paginate treats a null data as an empty page", async () => { const client = makeClient(() => jsonResponse({})); - - const allItems: string[] = []; - for await (const item of client.paginate( - async () => ({ items: ["x"], pagination: { page: 1, total_pages: 1 } }), - )) { - allItems.push(item); - } - - expect(allItems).toEqual(["x"]); + const items: unknown[] = []; + for await (const item of client.paginate(async () => ({ data: null }))) items.push(item); + expect(items).toEqual([]); + }); + + test("paginate throws SeclaiError on a page with no items key", async () => { + const client = makeClient(() => jsonResponse({ configs: [{ id: "c1" }], total: 1 })); + const run = async () => { + // The legacy `configs` shape is not one paginate() reads; the cast stands + // in for a caller whose fetcher is typed more loosely than it behaves. + for await (const _ of client.paginate( + async (opts) => (await client.listAlertConfigs(opts)) as { data?: unknown[] }, + )) { + void _; + } + }; + await expect(run()).rejects.toThrow(SeclaiError); + await expect(run()).rejects.not.toThrow(TypeError); }); }); @@ -2648,7 +2788,7 @@ describe("API version constants", () => { test("a constant reaches the wire", async () => { const client = makeClient( (req) => { - expect(req.headers["seclai-version"]).toBe("2026-07-27"); + expect(req.headers["seclai-version"]).toBe("2026-10-03"); return jsonResponse({ data: [] }); }, { apiVersion: SeclaiApiVersion.Latest }, @@ -2792,3 +2932,163 @@ describe("API version guard validates what the merge produces", () => { ); }); }); + +describe("Cloud drives, embedders/rerankers and source contents", () => { + const PAGINATION = { page: 1, limit: 1, total: 1, pages: 1, has_next: false, has_prev: false }; + + type Call = { + name: string; + run: (c: Seclai) => Promise; + verb: string; + path: string; + query?: [string, string][]; + body?: unknown; + }; + + const calls: Call[] = [ + { name: "listCloudDriveProviders", run: (c) => c.listCloudDriveProviders(), verb: "GET", path: "/cloud-drives/providers" }, + { name: "listCloudDrives", run: (c) => c.listCloudDrives(), verb: "GET", path: "/cloud-drives" }, + { name: "getCloudDrive", run: (c) => c.getCloudDrive("c1"), verb: "GET", path: "/cloud-drives/c1" }, + { + name: "updateCloudDrive", + run: (c) => c.updateCloudDrive("c1", { name: "Contracts" }), + verb: "PATCH", + path: "/cloud-drives/c1", + body: { name: "Contracts" }, + }, + { name: "disconnectCloudDrive", run: (c) => c.disconnectCloudDrive("c1"), verb: "POST", path: "/cloud-drives/c1/disconnect" }, + { name: "deleteCloudDrive", run: (c) => c.deleteCloudDrive("c1"), verb: "DELETE", path: "/cloud-drives/c1" }, + { name: "getAgentsUsingCloudDrive", run: (c) => c.getAgentsUsingCloudDrive("c1"), verb: "GET", path: "/cloud-drives/c1/agents" }, + { + name: "listCloudDriveRejections with a limit", + run: (c) => c.listCloudDriveRejections("c1", { limit: 20 }), + verb: "GET", + path: "/cloud-drives/c1/rejections", + query: [["limit", "20"]], + }, + { name: "listCloudDriveRejections", run: (c) => c.listCloudDriveRejections("c1"), verb: "GET", path: "/cloud-drives/c1/rejections" }, + { + name: "listEmbeddingModels with a filter", + run: (c) => c.listEmbeddingModels({ supportsInputMedia: "image" }), + verb: "GET", + path: "/models/embedders", + query: [["supports_input_media", "image"]], + }, + { name: "listEmbeddingModels", run: (c) => c.listEmbeddingModels(), verb: "GET", path: "/models/embedders" }, + { name: "listRerankerModels", run: (c) => c.listRerankerModels(), verb: "GET", path: "/models/rerankers" }, + { + name: "listSourceContents with every option", + run: (c) => + c.listSourceContents("s1", { + page: 2, + limit: 10, + sort: "title", + order: "asc", + status: "failed", + contentVersionIds: ["cv1", "cv2"], + }), + verb: "GET", + path: "/sources/s1/contents", + query: [ + ["page", "2"], + ["limit", "10"], + ["sort", "title"], + ["order", "asc"], + ["status", "failed"], + ["content_version_id", "cv1"], + ["content_version_id", "cv2"], + ], + }, + { name: "listSourceContents", run: (c) => c.listSourceContents("s1"), verb: "GET", path: "/sources/s1/contents" }, + { + name: "getSourceContentStatus", + run: (c) => c.getSourceContentStatus("s1", "cv1"), + verb: "GET", + path: "/sources/s1/contents/cv1", + }, + ]; + + test.each(calls)("$name sends $verb $path", async ({ run, verb, path, query, body }) => { + let seen: unknown; + const client = makeClient((req) => { + const url = new URL(req.url); + seen = { + verb: req.method, + path: url.pathname, + query: [...url.searchParams.entries()], + body: req.bodyText === undefined ? undefined : JSON.parse(req.bodyText), + }; + return jsonResponse({ data: [] }); + }); + await run(client); + expect(seen).toEqual({ verb, path, query: query ?? [], body }); + }); + + const lists: { name: string; run: (c: Seclai) => Promise }[] = [ + { name: "listCloudDriveProviders", run: (c) => c.listCloudDriveProviders() }, + { name: "listCloudDrives", run: (c) => c.listCloudDrives() }, + { name: "getAgentsUsingCloudDrive", run: (c) => c.getAgentsUsingCloudDrive("c1") }, + { name: "listCloudDriveRejections", run: (c) => c.listCloudDriveRejections("c1") }, + ]; + + test.each(lists)("$name reads the legacy bare array", async ({ run }) => { + const client = makeClient(() => jsonResponse([{ id: "x1" }])); + expect(await run(client)).toEqual([{ id: "x1" }]); + }); + + test.each(lists)("$name reads the 2026-07-27 envelope", async ({ run }) => { + const client = makeClient(() => jsonResponse({ data: [{ id: "x1" }], pagination: PAGINATION })); + expect(await run(client)).toEqual([{ id: "x1" }]); + }); + + const modelLists: { name: string; run: (c: Seclai) => Promise<{ models: unknown[] }> }[] = [ + { name: "listEmbeddingModels", run: (c) => c.listEmbeddingModels() }, + { name: "listRerankerModels", run: (c) => c.listRerankerModels() }, + ]; + + test.each(modelLists)("$name reads the legacy models key", async ({ run }) => { + const client = makeClient(() => + jsonResponse({ models: [{ model_type: "m1" }], default_model_type: "m1" }), + ); + const res = await run(client); + expect(res.models).toEqual([{ model_type: "m1" }]); + expect(res).toHaveProperty("default_model_type", "m1"); + }); + + test.each(modelLists)("$name keeps models and the pricing on the 2026-07-27 envelope", async ({ run }) => { + const client = makeClient(() => + jsonResponse({ data: [{ model_type: "m1" }], pagination: PAGINATION, default_model_type: "m1" }), + ); + const res = await run(client); + expect(res.models).toEqual([{ model_type: "m1" }]); + expect(res).toHaveProperty("default_model_type", "m1"); + expect(res).toHaveProperty("pagination", PAGINATION); + }); + + test("listSourceContents returns the envelope", async () => { + const body = { data: [{ content_version_id: "cv1" }], pagination: PAGINATION }; + const client = makeClient(() => jsonResponse(body)); + expect(await client.listSourceContents("s1")).toEqual(body); + }); + + test("listSourceContents with no ids returns an empty page without a request", async () => { + let requests = 0; + const client = makeClient(() => { + requests += 1; + return jsonResponse({ data: [{ content_version_id: "cv1" }], pagination: PAGINATION }); + }); + expect(await client.listSourceContents("s1", { contentVersionIds: [] })).toEqual({ + data: [], + pagination: { page: 1, limit: 20, total: 0, pages: 0, has_next: false, has_prev: false }, + }); + expect( + (await client.listSourceContents("s1", { contentVersionIds: [], page: 3, limit: 5 })).pagination, + ).toEqual({ page: 3, limit: 5, total: 0, pages: 0, has_next: false, has_prev: false }); + expect(requests).toBe(0); + }); + + test("deleteCloudDrive discards the acknowledgement", async () => { + const client = makeClient(() => jsonResponse({ ok: true })); + expect(await client.deleteCloudDrive("c1")).toBeUndefined(); + }); +});