From 196774fc2936d2345c437beb5d460ae8dbceeddc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 6 Aug 2026 12:04:54 +0000 Subject: [PATCH] chore: refresh LangSmith platform OpenAPI spec Automated refresh from api.smith.langchain.com with fleet and internal endpoints filtered for public documentation. --- src/langsmith/langsmith-platform-openapi.json | 18541 ++++++++++------ 1 file changed, 11631 insertions(+), 6910 deletions(-) diff --git a/src/langsmith/langsmith-platform-openapi.json b/src/langsmith/langsmith-platform-openapi.json index 9ba5e761a6..967eafb1a9 100644 --- a/src/langsmith/langsmith-platform-openapi.json +++ b/src/langsmith/langsmith-platform-openapi.json @@ -6,29 +6,6 @@ "version": "0.1.0" }, "paths": { - "/api/v1/info": { - "get": { - "tags": [ - "info" - ], - "summary": "Get Server Info", - "description": "Get information about the current deployment of LangSmith.", - "operationId": "get_server_info_api_v1_info_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InfoGetResponse" - } - } - } - } - }, - "x-public": true - } - }, "/api/v1/info/health": { "get": { "tags": [ @@ -7097,6 +7074,7 @@ "summary": "Read Examples With Runs", "description": "Fetch examples for a dataset, and fetch the runs for each example if they are associated with the given session_ids.", "operationId": "read_examples_with_runs_api_v1_datasets__dataset_id__runs_post", + "deprecated": true, "security": [ { "API Key": [] @@ -8777,6 +8755,7 @@ "summary": "Read Run", "description": "Get a specific run.", "operationId": "read_run_api_v1_runs__run_id__get", + "deprecated": true, "security": [ { "API Key": [] @@ -8889,12 +8868,6 @@ "x-public": true }, "patch": { - "tags": [ - "run" - ], - "summary": "Update Run", - "description": "Update a run.", - "operationId": "update_run_api_v1_runs__run_id__patch", "security": [ { "API Key": [] @@ -8906,39 +8879,121 @@ "Bearer Auth": [] } ], + "description": "Updates a run identified by its ID. The body should contain only the fields to be changed; unknown fields are ignored.", + "tags": [ + "runs" + ], + "summary": "Update a Run", "parameters": [ { + "description": "Run ID", "name": "run_id", "in": "path", "required": true, "schema": { - "type": "string", "format": "uuid", - "title": "Run Id" + "type": "string" } } ], "responses": { - "200": { - "description": "Successful Response", + "202": { + "description": "Run updated", "content": { "application/json": { - "schema": {} + "schema": { + "type": "object", + "additionalProperties": { + "allOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } } } }, "422": { - "description": "Validation Error", + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.Run" + } + } + } + } } }, "/api/v1/runs/{run_id}/share": { @@ -8949,6 +9004,7 @@ "summary": "Read Run Share State", "description": "Get the state of sharing of a run.", "operationId": "read_run_share_state_api_v1_runs__run_id__share_get", + "deprecated": true, "security": [ { "API Key": [] @@ -9011,6 +9067,7 @@ "summary": "Share Run", "description": "Share a run.", "operationId": "share_run_api_v1_runs__run_id__share_put", + "deprecated": true, "security": [ { "API Key": [] @@ -9065,6 +9122,7 @@ "summary": "Unshare Run", "description": "Unshare a run.", "operationId": "unshare_run_api_v1_runs__run_id__share_delete", + "deprecated": true, "security": [ { "API Key": [] @@ -9193,6 +9251,7 @@ } } }, + "deprecated": true, "security": [ { "API Key": [] @@ -9328,22 +9387,6 @@ }, "/api/v1/runs": { "post": { - "tags": [ - "run" - ], - "summary": "Create Run Proxy", - "description": "Create a new run.", - "operationId": "create_run_proxy_api_v1_runs_post", - "responses": { - "202": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, "security": [ { "API Key": [] @@ -9355,27 +9398,104 @@ "Bearer Auth": [] } ], - "x-public": true - } - }, - "/api/v1/runs/batch": { - "post": { + "description": "Queues a single run for ingestion. The request body must be a JSON-encoded run object that follows the Run schema.", "tags": [ - "run" + "runs" ], - "summary": "Create Runs Batch Proxy", - "description": "Proxy POST /runs/batch to Go backend for tests.", - "operationId": "create_runs_batch_proxy_api_v1_runs_batch_post", + "summary": "Create a Run", + "parameters": [], "responses": { "202": { - "description": "Successful Response", + "description": "Run created", "content": { "application/json": { - "schema": {} + "schema": { + "type": "object", + "additionalProperties": { + "allOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } } } } }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.Run" + } + } + } + } + } + }, + "/api/v1/runs/batch": { + "post": { "security": [ { "API Key": [] @@ -9387,27 +9507,128 @@ "Bearer Auth": [] } ], - "x-public": true - } - }, - "/api/v1/runs/multipart": { - "post": { + "description": "Ingests a batch of runs in a single JSON payload. The payload must have `post` and/or `patch` arrays containing run objects.\nPrefer this endpoint over single‑run ingestion when submitting hundreds of runs, but `/runs/multipart` offers better handling for very large fields and attachments.", "tags": [ - "run" + "runs" ], - "summary": "Create Runs Multipart Proxy", - "description": "Proxy POST /runs/multipart to Go backend for tests.", - "operationId": "create_runs_multipart_proxy_api_v1_runs_multipart_post", + "summary": "Ingest Runs (Batch JSON)", + "parameters": [], "responses": { "202": { - "description": "Successful Response", + "description": "Runs batch ingested", "content": { "application/json": { - "schema": {} + "schema": { + "type": "object", + "additionalProperties": { + "allOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "413": { + "description": "Request Entity Too Large", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } } } } }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patch": { + "type": "array", + "items": { + "$ref": "#/components/schemas/runs.Run" + } + }, + "post": { + "type": "array", + "items": { + "$ref": "#/components/schemas/runs.Run" + } + } + } + } + } + } + } + } + }, + "/api/v1/runs/multipart": { + "post": { "security": [ { "API Key": [] @@ -9419,7 +9640,140 @@ "Bearer Auth": [] } ], - "x-public": true + "description": "Ingests multiple runs, feedback objects, and binary attachments in a single `multipart/form-data` request.\n**Part‑name pattern**: `.[.]` where `event` ∈ {`post`, `patch`, `feedback`, `attachment`}.\n* `post|patch.` – JSON run payload.\n* `post|patch..` – out‑of‑band run data (`inputs`, `outputs`, `events`, `error`, `extra`, `serialized`).\n* `feedback.` – JSON feedback payload (must include `trace_id` and `session_id`).\n* `attachment..` – arbitrary binary attachment stored in S3.\n**Headers**: every part must set `Content-Type` **and** either a `Content-Length` header or `length` parameter. Per‑part `Content-Encoding` is **not** allowed; the top‑level request may be `Content-Encoding: gzip` or `Content-Encoding: zstd`.\n**Best performance** for high‑volume ingestion.", + "tags": [ + "runs" + ], + "summary": "Ingest Runs (Multipart)", + "parameters": [], + "responses": { + "202": { + "description": "Accepted", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "413": { + "description": "Request Entity Too Large", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + }, + "501": { + "description": "a feedback part needs session_id in current db deployment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.ErrorResponse" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "post.{run_id}": { + "type": "string", + "format": "binary", + "description": "Run to create (JSON)" + }, + "patch.{run_id}": { + "type": "string", + "format": "binary", + "description": "Run to update (JSON)" + }, + "post.{run_id}.inputs": { + "type": "string", + "format": "binary", + "description": "Large inputs object (JSON) stored out‑of‑band" + }, + "patch.{run_id}.outputs": { + "type": "string", + "format": "binary", + "description": "Large outputs object (JSON) stored out‑of‑band" + }, + "feedback.{run_id}": { + "type": "string", + "format": "binary", + "description": "Feedback object (JSON) – must include trace_id and session_id" + }, + "attachment.{run_id}.{filename}": { + "type": "string", + "format": "binary", + "description": "Binary attachment linked to run {run_id}" + } + } + } + } + } + } } }, "/api/v1/runs/group": { @@ -9723,8 +10077,9 @@ "feedback" ], "summary": "Create Feedback Formula Ep", - "description": "Create a new feedback formula", + "description": "Create a new feedback formula\n\nDeprecated: use POST /api/v1/feedback/composite-evaluators instead to create a code evaluator from the feedback formula.", "operationId": "create_feedback_formula_ep_api_v1_feedback_formulas_post", + "deprecated": true, "security": [ { "API Key": [] @@ -9775,8 +10130,9 @@ "feedback" ], "summary": "List Feedback Formula Ep", - "description": "List feedback formulas for a given dataset or tracing project", + "description": "List feedback formulas for a given dataset or tracing project\n\nDeprecated: superseded by composite-feedback v2, where composites are code evaluators with run rules.", "operationId": "list_feedback_formula_ep_api_v1_feedback_formulas_get", + "deprecated": true, "security": [ { "API Key": [] @@ -9879,8 +10235,9 @@ "feedback" ], "summary": "Get Feedback Formula Ep", - "description": "Get a feedback formula by id", + "description": "Get a feedback formula by id\n\nDeprecated: superseded by composite-feedback v2, where composites are code evaluators with run rules", "operationId": "get_feedback_formula_ep_api_v1_feedback_formulas__feedback_formula_id__get", + "deprecated": true, "security": [ { "API Key": [] @@ -9933,8 +10290,9 @@ "feedback" ], "summary": "Update Feedback Formula Ep", - "description": "Update a feedback formula", + "description": "Update a feedback formula\n\nDeprecated: superseded by composite-feedback v2, where composites are code evaluators with run rules", "operationId": "update_feedback_formula_ep_api_v1_feedback_formulas__feedback_formula_id__put", + "deprecated": true, "security": [ { "API Key": [] @@ -9997,8 +10355,9 @@ "feedback" ], "summary": "Delete Feedback Formula Endpoint", - "description": "Delete a feedback formula by id", + "description": "Delete a feedback formula by id\n\nDeprecated: superseded by composite-feedback v2, where composites are run\nrules (see DELETE /api/v1/runs/rules/{rule_id}). Tenants on v2 receive HTTP 410.", "operationId": "delete_feedback_formula_endpoint_api_v1_feedback_formulas__feedback_formula_id__delete", + "deprecated": true, "security": [ { "API Key": [] @@ -10464,6 +10823,22 @@ "title": "Min Created At" } }, + { + "name": "feedback_thread_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Feedback Thread Id" + } + }, { "name": "include_user_names", "in": "query", @@ -10531,7 +10906,7 @@ "feedback" ], "summary": "Create Feedback", - "description": "Create a new feedback.", + "description": "Create a new feedback.\n\n`session_id` is required: it identifies the tracing project the feedback\nbelongs to.", "operationId": "create_feedback_api_v1_feedback_post", "security": [ { @@ -10585,7 +10960,7 @@ "feedback" ], "summary": "Eagerly Create Feedback", - "description": "Create a new feedback.\n\nThis method is invoked under the assumption that the run\nis already visible in the app, thus already present in DB", + "description": "Deprecated: use POST /feedback instead.\n\nThis method is invoked under the assumption that the run\nis already visible in the app, thus already present in DB", "operationId": "eagerly_create_feedback_api_v1_feedback_eager_post", "requestBody": { "content": { @@ -10619,6 +10994,7 @@ } } }, + "deprecated": true, "security": [ { "API Key": [] @@ -11013,6 +11389,7 @@ "summary": "Get Shared Run By Id", "description": "Get the shared run.", "operationId": "get_shared_run_by_id_api_v1_public__share_token__run__id__get", + "deprecated": true, "parameters": [ { "name": "id", @@ -11078,6 +11455,7 @@ "summary": "Query Shared Runs", "description": "Get run by ids or the shared run if not specifed.", "operationId": "query_shared_runs_api_v1_public__share_token__runs_query_post", + "deprecated": true, "parameters": [ { "name": "share_token", @@ -11836,6 +12214,22 @@ "title": "Sort By Feedback Key" } }, + { + "name": "sort_by_feedback_source", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Sort By Feedback Source" + } + }, { "name": "offset", "in": "query", @@ -11869,6 +12263,68 @@ "title": "Facets" } }, + { + "name": "use_approx_stats", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Use Approx Stats" + } + }, + { + "name": "stats_start_time", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Stats Start Time" + } + }, + { + "name": "stats_select", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "title": "Stats Select" + } + }, + { + "name": "stats_filter", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Stats Filter" + } + }, { "name": "accept", "in": "header", @@ -12101,7 +12557,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RunStatsQueryParams" + "$ref": "#/components/schemas/RunStatsQueryParamsPublic" } } } @@ -13169,6 +13625,7 @@ ], "summary": "Add Runs To Annotation Queue", "operationId": "add_runs_to_annotation_queue_api_v1_annotation_queues__queue_id__runs_post", + "deprecated": true, "security": [ { "API Key": [] @@ -13197,7 +13654,7 @@ "required": false, "schema": { "type": "boolean", - "default": true, + "default": false, "title": "Extend Trace Retention" } } @@ -13267,6 +13724,7 @@ ], "summary": "Get Runs From Annotation Queue", "operationId": "get_runs_from_annotation_queue_api_v1_annotation_queues__queue_id__runs_get", + "deprecated": true, "security": [ { "API Key": [] @@ -13401,7 +13859,9 @@ "annotation-queues" ], "summary": "Add Runs To Annotation Queue By Key", + "description": "Self-hosted deployments require LangSmith `v0.16` or later.", "operationId": "add_runs_to_annotation_queue_by_key_api_v1_annotation_queues__queue_id__runs_by_key_post", + "deprecated": true, "security": [ { "API Key": [] @@ -13430,7 +13890,7 @@ "required": false, "schema": { "type": "boolean", - "default": true, + "default": false, "title": "Extend Trace Retention" } } @@ -13549,6 +14009,7 @@ "summary": "Get Run From Annotation Queue", "description": "Get a run from an annotation queue", "operationId": "get_run_from_annotation_queue_api_v1_annotation_queues__queue_id__run__index__get", + "deprecated": true, "security": [ { "API Key": [] @@ -13682,6 +14143,7 @@ ], "summary": "Update Run In Annotation Queue", "operationId": "update_run_in_annotation_queue_api_v1_annotation_queues__queue_id__runs__queue_run_id__patch", + "deprecated": true, "security": [ { "API Key": [] @@ -13753,6 +14215,7 @@ ], "summary": "Delete Run From Annotation Queue", "operationId": "delete_run_from_annotation_queue_api_v1_annotation_queues__queue_id__runs__queue_run_id__delete", + "deprecated": true, "security": [ { "API Key": [] @@ -13816,6 +14279,7 @@ ], "summary": "Delete Runs From Annotation Queue", "operationId": "delete_runs_from_annotation_queue_api_v1_annotation_queues__queue_id__runs_delete_post", + "deprecated": true, "security": [ { "API Key": [] @@ -13879,6 +14343,7 @@ ], "summary": "Get Total Size From Annotation Queue", "operationId": "get_total_size_from_annotation_queue_api_v1_annotation_queues__queue_id__total_size_get", + "deprecated": true, "security": [ { "API Key": [] @@ -13934,6 +14399,7 @@ ], "summary": "Get Total Archived From Annotation Queue", "operationId": "get_total_archived_from_annotation_queue_api_v1_annotation_queues__queue_id__total_archived_get", + "deprecated": true, "security": [ { "API Key": [] @@ -14023,6 +14489,7 @@ ], "summary": "Get Size From Annotation Queue", "operationId": "get_size_from_annotation_queue_api_v1_annotation_queues__queue_id__size_get", + "deprecated": true, "security": [ { "API Key": [] @@ -14099,6 +14566,7 @@ ], "summary": "Create Identity Annotation Queue Run Status", "operationId": "create_identity_annotation_queue_run_status_api_v1_annotation_queues_status__annotation_queue_run_id__post", + "deprecated": true, "security": [ { "API Key": [] @@ -14163,6 +14631,7 @@ "summary": "Resolve Annotation Queue Run", "description": "Resolve a queue run ID to its section and run data for deep linking.", "operationId": "resolve_annotation_queue_run_api_v1_annotation_queues__queue_id__runs_resolve__queue_run_id__get", + "deprecated": true, "security": [ { "API Key": [] @@ -15271,16 +15740,93 @@ ], "summary": "Read Model Price Map", "operationId": "read_model_price_map_api_v1_model_price_map_get", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "default": 100, + "title": "Limit" + } + }, + { + "name": "q", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "maxLength": 200 + }, + { + "type": "null" + } + ], + "title": "Q" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ModelPriceMapSchema" + }, + "title": "Response Read Model Price Map Api V1 Model Price Map Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } } } } }, + "x-public": true + }, + "post": { + "tags": [ + "model-price-map" + ], + "summary": "Create New Model Price", + "operationId": "create_new_model_price_api_v1_model_price_map_post", "security": [ { "API Key": [] @@ -15292,97 +15838,78 @@ "Bearer Auth": [] } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelPriceMapCreateSchema" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, "x-public": true - }, - "post": { + } + }, + "/api/v1/model-price-map/{id}": { + "put": { "tags": [ "model-price-map" ], - "summary": "Create New Model Price", - "operationId": "create_new_model_price_api_v1_model_price_map_post", + "summary": "Update Model Price", + "operationId": "update_model_price_api_v1_model_price_map__id__put", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Id" + } + } + ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ModelPriceMapCreateSchema" + "$ref": "#/components/schemas/ModelPriceMapUpdateSchema" } } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "x-public": true - } - }, - "/api/v1/model-price-map/{id}": { - "put": { - "tags": [ - "model-price-map" - ], - "summary": "Update Model Price", - "operationId": "update_model_price_api_v1_model_price_map__id__put", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Id" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ModelPriceMapUpdateSchema" - } - } - } + } }, "responses": { "200": { @@ -15870,6 +16397,58 @@ } }, "/api/v1/playground-settings": { + "post": { + "tags": [ + "playground-settings" + ], + "summary": "Create Playground Settings", + "description": "Create playground settings.", + "operationId": "create_playground_settings_api_v1_playground_settings_post", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlaygroundSettingsCreateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlaygroundSettingsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + }, "get": { "tags": [ "playground-settings" @@ -15877,22 +16456,76 @@ "summary": "List Playground Settings", "description": "Get all playground settings for this tenant id.", "operationId": "list_playground_settings_api_v1_playground_settings_get", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "scope", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "enum": [ + "workspace", + "organization" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Scope" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { + "type": "array", "items": { "$ref": "#/components/schemas/PlaygroundSettingsResponse" }, - "type": "array", "title": "Response List Playground Settings Api V1 Playground Settings Get" } } } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } }, + "x-public": true + } + }, + "/api/v1/playground-settings/{playground_settings_id}": { + "get": { + "tags": [ + "playground-settings" + ], + "summary": "Get Playground Settings", + "description": "Get a single playground settings by ID.", + "operationId": "get_playground_settings_api_v1_playground_settings__playground_settings_id__get", "security": [ { "API Key": [] @@ -15904,25 +16537,17 @@ "Bearer Auth": [] } ], - "x-public": true - }, - "post": { - "tags": [ - "playground-settings" - ], - "summary": "Create Playground Settings", - "description": "Create playground settings.", - "operationId": "create_playground_settings_api_v1_playground_settings_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PlaygroundSettingsCreateRequest" - } + "parameters": [ + { + "name": "playground_settings_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Playground Settings Id" } - }, - "required": true - }, + } + ], "responses": { "200": { "description": "Successful Response", @@ -15945,6 +16570,15 @@ } } }, + "x-public": true + }, + "patch": { + "tags": [ + "playground-settings" + ], + "summary": "Update Playground Settings", + "description": "Update playground settings.", + "operationId": "update_playground_settings_api_v1_playground_settings__playground_settings_id__patch", "security": [ { "API Key": [] @@ -15956,133 +16590,58 @@ "Bearer Auth": [] } ], + "parameters": [ + { + "name": "playground_settings_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Playground Settings Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlaygroundSettingsUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlaygroundSettingsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, "x-public": true - } - }, - "/api/v1/playground-settings/{playground_settings_id}": { - "get": { + }, + "delete": { "tags": [ "playground-settings" ], - "summary": "Get Playground Settings", - "description": "Get a single playground settings by ID.", - "operationId": "get_playground_settings_api_v1_playground_settings__playground_settings_id__get", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "playground_settings_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Playground Settings Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PlaygroundSettingsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-public": true - }, - "patch": { - "tags": [ - "playground-settings" - ], - "summary": "Update Playground Settings", - "description": "Update playground settings.", - "operationId": "update_playground_settings_api_v1_playground_settings__playground_settings_id__patch", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "playground_settings_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Playground Settings Id" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PlaygroundSettingsUpdateRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PlaygroundSettingsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-public": true - }, - "delete": { - "tags": [ - "playground-settings" - ], - "summary": "Delete Playground Settings", - "description": "Delete playground settings.", - "operationId": "delete_playground_settings_api_v1_playground_settings__playground_settings_id__delete", + "summary": "Delete Playground Settings", + "description": "Delete playground settings.", + "operationId": "delete_playground_settings_api_v1_playground_settings__playground_settings_id__delete", "security": [ { "API Key": [] @@ -16511,13 +17070,33 @@ "charts" ], "summary": "Create Chart", - "description": "Create a new chart.", + "description": "Create a chart or dashboard text block.", "operationId": "create_chart_api_v1_charts_create_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomChartCreate" + "oneOf": [ + { + "$ref": "#/components/schemas/CustomChartCreate" + }, + { + "$ref": "#/components/schemas/CustomTextBlockCreate" + } + ], + "title": "Chart", + "discriminator": { + "propertyName": "chart_type", + "mapping": { + "line": "#/components/schemas/CustomChartCreate", + "bar": "#/components/schemas/CustomChartCreate", + "table": "#/components/schemas/CustomChartCreate", + "kpi": "#/components/schemas/CustomChartCreate", + "top-k": "#/components/schemas/CustomChartCreate", + "pie": "#/components/schemas/CustomChartCreate", + "text": "#/components/schemas/CustomTextBlockCreate" + } + } } } }, @@ -16529,7 +17108,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomChartResponse" + "oneOf": [ + { + "$ref": "#/components/schemas/CustomChartResponse" + }, + { + "$ref": "#/components/schemas/CustomTextBlockResponse" + } + ], + "title": "Response Create Chart Api V1 Charts Create Post", + "discriminator": { + "propertyName": "chart_type", + "mapping": { + "line": "#/components/schemas/CustomChartResponse", + "bar": "#/components/schemas/CustomChartResponse", + "table": "#/components/schemas/CustomChartResponse", + "kpi": "#/components/schemas/CustomChartResponse", + "top-k": "#/components/schemas/CustomChartResponse", + "pie": "#/components/schemas/CustomChartResponse", + "text": "#/components/schemas/CustomTextBlockResponse" + } + } } } } @@ -16565,7 +17164,7 @@ "charts" ], "summary": "Read Single Chart", - "description": "Get a single chart by ID.", + "description": "Get a single chart or text block by ID.", "operationId": "read_single_chart_api_v1_charts__chart_id__post", "security": [ { @@ -16606,7 +17205,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SingleCustomChartResponse" + "oneOf": [ + { + "$ref": "#/components/schemas/SingleCustomChartResponse" + }, + { + "$ref": "#/components/schemas/CustomTextBlockResponse" + } + ], + "discriminator": { + "propertyName": "chart_type", + "mapping": { + "line": "#/components/schemas/SingleCustomChartResponse", + "bar": "#/components/schemas/SingleCustomChartResponse", + "table": "#/components/schemas/SingleCustomChartResponse", + "kpi": "#/components/schemas/SingleCustomChartResponse", + "top-k": "#/components/schemas/SingleCustomChartResponse", + "pie": "#/components/schemas/SingleCustomChartResponse", + "text": "#/components/schemas/CustomTextBlockResponse" + } + }, + "title": "Response Read Single Chart Api V1 Charts Chart Id Post" } } } @@ -16629,7 +17248,7 @@ "charts" ], "summary": "Update Chart", - "description": "Update a chart.", + "description": "Update a chart or text block.", "operationId": "update_chart_api_v1_charts__chart_id__patch", "security": [ { @@ -16670,7 +17289,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CustomChartResponse" + "oneOf": [ + { + "$ref": "#/components/schemas/CustomChartResponse" + }, + { + "$ref": "#/components/schemas/CustomTextBlockResponse" + } + ], + "discriminator": { + "propertyName": "chart_type", + "mapping": { + "line": "#/components/schemas/CustomChartResponse", + "bar": "#/components/schemas/CustomChartResponse", + "table": "#/components/schemas/CustomChartResponse", + "kpi": "#/components/schemas/CustomChartResponse", + "top-k": "#/components/schemas/CustomChartResponse", + "pie": "#/components/schemas/CustomChartResponse", + "text": "#/components/schemas/CustomTextBlockResponse" + } + }, + "title": "Response Update Chart Api V1 Charts Chart Id Patch" } } } @@ -17282,7 +17921,7 @@ "mcp" ], "summary": "Get Tools", - "description": "Return MCP tools — from cache if fresh, otherwise by fetching from remote.\n\nOn cache miss, tries manifest fetch first (fast), then falls back to full\nMCP handshake. Caches the result before returning.\n\nPass force_refresh=true to bypass the cache and always fetch from the\nremote server (the result is still cached via upsert for future requests).\n\nThe ls_user_id query parameter allows service-key callers (which don't carry\nls_user_id in auth) to specify the user for per-user OAuth cache lookups.", + "description": "Return MCP tools — from cache if fresh, otherwise by fetching from remote.\n\nOn cache miss, tries manifest fetch first (fast), then falls back to full\nMCP handshake. Caches the result before returning.\n\nPass force_refresh=true to bypass the cache and always fetch from the\nremote server (the result is still cached via upsert for future requests).\n\n``agent_id`` lets deployment/service-key callers name an agent OAuth\nsubject. ``ls_user_id`` overrides are limited to service identities.", "operationId": "get_tools_api_v1_mcp_tools_get", "security": [ { @@ -17337,6 +17976,22 @@ "title": "Ls User Id" } }, + { + "name": "agent_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Agent Id" + } + }, { "name": "force_refresh", "in": "query", @@ -19692,7 +20347,7 @@ "orgs" ], "summary": "Get Granular Usage", - "description": "Get granular usage data with flexible grouping.\n\n`kind` selects the billable usage domain:\n- `traces` (default): trace counts.\n- `langsmith_deployments`: LangSmith Deployment metrics (nodes\n executed, agent runs, agent uptime). The three Deployment fields\n are populated and `traces` is `0`.\n\n`trace_tier` (only meaningful for `kind=traces`) optionally restricts\nresults to a single retention tier (longlived = extended retention,\nshortlived = standard retention). When `group_by=trace_tier`, results\nare split into one record per retention tier per time bucket.\n\n`workspace_ids` filters results to the specified workspaces. Only\nworkspaces the user has read access to are included.", + "description": "Get granular usage data with flexible grouping.\n\n`kind` selects the billable usage domain:\n- `traces` (default): trace counts.\n- `langsmith_deployments`: LangSmith Deployment metrics (nodes\n executed, agent runs, agent uptime). The three Deployment fields\n are populated and `traces` is `0`.\n\n`trace_tier` (only meaningful for `kind=traces`) optionally restricts\nresults to a single retention tier (longlived = extended retention,\nshortlived = standard retention). When `group_by=trace_tier`, results\nare split into one record per retention tier per time bucket.\n\n`workspace_ids` filters results to the specified workspaces. Only\nworkspaces the user has read access to are included. When omitted, all\nworkspaces the user can read are included (avoids enumerating every\nworkspace id in the URL, which can exceed proxy header limits).", "operationId": "get_granular_usage_api_v1_orgs_current_billing_granular_usage_get", "security": [ { @@ -19729,126 +20384,140 @@ { "name": "workspace_ids", "in": "query", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "title": "Workspace Ids" - } - }, - { - "name": "group_by", - "in": "query", - "required": false, - "schema": { - "$ref": "#/components/schemas/GranularUsageGroupBy", - "default": "workspace" - } - }, - { - "name": "kind", - "in": "query", - "required": false, - "schema": { - "$ref": "#/components/schemas/GranularUsageKind", - "default": "traces" - } - }, - { - "name": "trace_tier", - "in": "query", "required": false, "schema": { "anyOf": [ { - "$ref": "#/components/schemas/TraceTier" + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "title": "Workspace Ids" + } + }, + { + "name": "group_by", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/GranularUsageGroupBy", + "default": "workspace" + } + }, + { + "name": "kind", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/GranularUsageKind", + "default": "traces" + } + }, + { + "name": "trace_tier", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/TraceTier" + }, + { + "type": "null" + } + ], + "title": "Trace Tier" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GranularUsageResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/orgs/current/billing/granular-usage/export": { + "get": { + "tags": [ + "orgs" + ], + "summary": "Export Granular Usage Csv", + "description": "Export granular usage data as CSV.\n\nSame `kind` semantics as `/granular-usage`. The CSV's value columns\nvary by kind:\n- `traces`: single `Traces` column.\n- `langsmith_deployments`: `Nodes Executed`, `Agent Runs`,\n `Agent Uptime (seconds)` columns.\nDimension columns are identical across kinds.", + "operationId": "export_granular_usage_csv_api_v1_orgs_current_billing_granular_usage_export_get", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "start_time", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time", + "title": "Start Time" + } + }, + { + "name": "end_time", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time", + "title": "End Time" + } + }, + { + "name": "workspace_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } }, { "type": "null" } ], - "title": "Trace Tier" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GranularUsageResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "x-public": true - } - }, - "/api/v1/orgs/current/billing/granular-usage/export": { - "get": { - "tags": [ - "orgs" - ], - "summary": "Export Granular Usage Csv", - "description": "Export granular usage data as CSV.\n\nSame `kind` semantics as `/granular-usage`. The CSV's value columns\nvary by kind:\n- `traces`: single `Traces` column.\n- `langsmith_deployments`: `Nodes Executed`, `Agent Runs`,\n `Agent Uptime (seconds)` columns.\nDimension columns are identical across kinds.", - "operationId": "export_granular_usage_csv_api_v1_orgs_current_billing_granular_usage_export_get", - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "start_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "format": "date-time", - "title": "Start Time" - } - }, - { - "name": "end_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "format": "date-time", - "title": "End Time" - } - }, - { - "name": "workspace_ids", - "in": "query", - "required": true, - "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, "title": "Workspace Ids" } }, @@ -25296,7 +25965,30 @@ "parameters": [] } }, - "/api/v1/hub/environments": { + "/.well-known/openid-configuration": { + "get": { + "description": "Returns the OpenID Connect discovery document (OpenID Connect Discovery 1.0), advertising the authorization, token, userinfo, and JWKS endpoints plus supported scopes, response types, and signing algorithms.", + "tags": [ + "oauth" + ], + "summary": "Get OpenID Connect provider configuration", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.OIDCProviderMetadata" + } + } + } + } + }, + "x-public": true, + "parameters": [] + } + }, + "/api/v1/commits/{owner}/{repo}": { "get": { "security": [ { @@ -25309,18 +26001,80 @@ "Bearer Auth": [] } ], - "description": "Returns the hub environments model for the current tenant.\nReturns 404 if no custom configuration exists.", + "description": "List commits for a repository, with pagination support.\nThis endpoint supports both authenticated and unauthenticated access.\nAuthenticated users can access private repositories; unauthenticated users can only access public repositories.\nThe include_stats parameter controls whether download and view statistics are computed (defaults to true).", "tags": [ - "hub_environments" + "commits" + ], + "summary": "List commits", + "parameters": [ + { + "description": "Repository owner (tenant handle) or '-' for private repos", + "name": "owner", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "IncludeStats determines whether to compute num_downloads and num_views", + "name": "include_stats", + "in": "query", + "schema": { + "type": "boolean", + "default": true, + "title": "Include Stats" + } + }, + { + "description": "Limit is the pagination limit", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "default": 20, + "title": "Limit" + } + }, + { + "description": "Offset is the pagination offset", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + }, + { + "description": "Tag filters commits to only those with a specific tag (e.g. \"production\", \"staging\")", + "name": "tag", + "in": "query", + "schema": { + "type": "string", + "title": "Tag" + } + } ], - "summary": "List hub environments", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.HubEnvironmentsModel" + "$ref": "#/components/schemas/commits.ListCommitsResponse" } } } @@ -25330,7 +26084,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25340,7 +26094,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25350,14 +26104,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } } }, - "x-public": true, - "parameters": [] + "x-public": true }, "post": { "security": [ @@ -25371,19 +26124,38 @@ "Bearer Auth": [] } ], - "description": "Creates the hub environments configuration for the current tenant.", + "description": "Creates a new commit in a repository.\nRequires authentication and write access to the repository.", "tags": [ - "hub_environments" + "commits" + ], + "summary": "Create a commit", + "parameters": [ + { + "description": "Repository owner (tenant handle) or '-' for private repos", + "name": "owner", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Create hub environments model", - "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.HubEnvironmentsModel" + "$ref": "#/components/schemas/commits.CreateCommitResponse" } } } @@ -25393,17 +26165,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25413,7 +26195,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25425,15 +26207,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.CreateEnvironmentsRequest" + "$ref": "#/components/schemas/commits.CreateCommitReq" } } } } } }, - "/api/v1/hub/environments/{id}": { - "delete": { + "/api/v1/commits/{owner}/{repo}/{commit}": { + "get": { "security": [ { "API Key": [] @@ -25445,20 +26227,75 @@ "Bearer Auth": [] } ], - "description": "Deletes the hub environments configuration. Tenant reverts to defaults.", + "description": "Retrieves a specific commit by hash, tag, or \"latest\" for a repository.\nThis endpoint supports both authenticated and unauthenticated access.\nAuthenticated users can access private repos, while unauthenticated users can only access public repos.\nCommit resolution logic:\n- \"latest\" or empty: Get the most recent commit\n- Less than 8 characters: Only check for tags\n- 8 or more characters: Prioritize commit hash over tag, check both", "tags": [ - "hub_environments" + "commits" ], - "summary": "Delete hub environments model", + "summary": "Get a commit", "parameters": [ { - "description": "Model ID", - "name": "id", + "description": "Repository owner (tenant handle) or '-' for private repos", + "name": "owner", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Commit hash, tag, or 'latest'", + "name": "commit", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "name": "get_examples", + "in": "query", + "schema": { + "type": "boolean", + "default": false, + "title": "Get Examples" + } + }, + { + "description": "Comma-separated list of optional fields: \"model\", \"is_draft\"", + "name": "include", + "in": "query", + "schema": { + "type": "string", + "title": "Include" + } + }, + { + "description": "Deprecated: use Include instead", + "name": "include_model", + "in": "query", + "schema": { + "type": "boolean", + "default": false, + "title": "Include Model" + } + }, + { + "name": "is_view", + "in": "query", + "schema": { + "type": "boolean", + "default": false, + "title": "Is View" + } } ], "responses": { @@ -25467,10 +26304,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/commits.CommitResponse" } } } @@ -25480,7 +26314,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25490,7 +26324,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25500,15 +26334,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } } }, "x-public": true - }, - "patch": { + } + }, + "/api/v1/hub/environments": { + "get": { "security": [ { "API Key": [] @@ -25520,22 +26356,11 @@ "Bearer Auth": [] } ], - "description": "Replaces the environments array on an existing model.", + "description": "Returns the hub environments model for the current tenant.\nReturns 404 if no custom configuration exists.", "tags": [ "hub_environments" ], - "summary": "Update hub environments model", - "parameters": [ - { - "description": "Model ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], + "summary": "List hub environments", "responses": { "200": { "description": "OK", @@ -25579,20 +26404,9 @@ } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/hub_environments.UpdateEnvironmentsRequest" - } - } - } - } - } - }, - "/auth/public": { - "get": { + "parameters": [] + }, + "post": { "security": [ { "API Key": [] @@ -25604,29 +26418,69 @@ "Bearer Auth": [] } ], - "description": "Returns public authentication information for the current workspace-level session.", + "description": "Creates the hub environments configuration for the current tenant.", "tags": [ - "auth" + "hub_environments" ], - "summary": "Get public auth info", + "summary": "Create hub environments model", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authn.PublicAuthInfo" + "$ref": "#/components/schemas/hub_environments.HubEnvironmentsModel" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/hub_environments.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/hub_environments.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } } }, "x-public": true, - "parameters": [] + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/hub_environments.CreateEnvironmentsRequest" + } + } + } + } } }, - "/auth/sandbox-access": { - "get": { + "/api/v1/hub/environments/{id}": { + "delete": { "security": [ { "API Key": [] @@ -25638,30 +26492,19 @@ "Bearer Auth": [] } ], - "description": "Combines authn + per-sandbox authz for runtime access. Returns the caller's PublicAuthInfo on allow (HTTP 200) or a 403 with the deny reason on deny.", + "description": "Deletes the hub environments configuration. Tenant reverts to defaults.", "tags": [ - "sandboxes" + "hub_environments" ], - "summary": "Get sandbox access decision", + "summary": "Delete hub environments model", "parameters": [ { - "description": "Sandbox UUID", - "name": "sandbox_id", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Sandbox Id" - } - }, - { - "description": "Runtime action: exec | file | tunnel | proxy", - "name": "action", - "in": "query", + "description": "Model ID", + "name": "id", + "in": "path", "required": true, "schema": { - "type": "string", - "title": "Action" + "type": "string" } } ], @@ -25671,7 +26514,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authn.PublicAuthInfo" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -25681,73 +26527,89 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } }, - "403": { - "description": "sandbox access denied: ", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } + } + }, + "x-public": true + }, + "patch": { + "security": [ + { + "API Key": [] }, - "404": { - "description": "Not Found", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Replaces the environments array on an existing model.", + "tags": [ + "hub_environments" + ], + "summary": "Update hub environments model", + "parameters": [ + { + "description": "Model ID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/hub_environments.HubEnvironmentsModel" } } } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } - } - }, - "x-public": true - } - }, - "/aws-marketplace/register": { - "post": { - "description": "Receives the x-amzn-marketplace-token posted by AWS Marketplace when a customer clicks \"Set Up Account\", resolves the customer identity, stores it in the DB, and redirects to the thank-you page.", - "tags": [ - "aws_marketplace" - ], - "summary": "AWS Marketplace fulfillment URL registration", - "parameters": [], - "responses": { - "303": { - "description": "Redirect to thank-you page" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } @@ -25757,7 +26619,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } @@ -25767,25 +26629,16 @@ "requestBody": { "required": true, "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "x-amzn-marketplace-token": { - "type": "string", - "description": "Registration token from AWS Marketplace" - } - }, - "required": [ - "x-amzn-marketplace-token" - ] + "$ref": "#/components/schemas/hub_environments.UpdateEnvironmentsRequest" } } } } } }, - "/commits/{owner}/{repo}": { + "/api/v1/info": { "get": { "security": [ { @@ -25798,117 +26651,28 @@ "Bearer Auth": [] } ], - "description": "Lists all commits for a repository with pagination support.\nThis endpoint supports both authenticated and unauthenticated access.\nAuthenticated users can access private repos, while unauthenticated users can only access public repos.\nThe include_stats parameter controls whether download and view statistics are computed (defaults to true).", + "description": "Returns information about the current LangSmith deployment: version,\ninstance feature flags, batch-ingest limits, and max SDK versions.\nUnauthenticated by default; set FF_INFO_ENDPOINT_AUTH_REQUIRED=true to require auth.", "tags": [ - "commits" - ], - "summary": "List commits", - "parameters": [ - { - "description": "Repository owner (tenant handle) or '-' for private repos", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Repository handle", - "name": "repo", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "IncludeStats determines whether to compute num_downloads and num_views", - "name": "include_stats", - "in": "query", - "schema": { - "type": "boolean", - "default": true, - "title": "Include Stats" - } - }, - { - "description": "Limit is the pagination limit", - "name": "limit", - "in": "query", - "schema": { - "minimum": 1, - "type": "integer", - "maximum": 100, - "default": 20, - "title": "Limit" - } - }, - { - "description": "Offset is the pagination offset", - "name": "offset", - "in": "query", - "schema": { - "minimum": 0, - "type": "integer", - "default": 0, - "title": "Offset" - } - }, - { - "description": "Tag filters commits to only those with a specific tag (e.g. \"production\", \"staging\")", - "name": "tag", - "in": "query", - "schema": { - "type": "string", - "title": "Tag" - } - } + "info" ], + "summary": "Get server info", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ListCommitsResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/info.InfoGetResponse" } } } } }, - "x-public": true - }, + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/alerts/{session_id}": { "post": { "security": [ { @@ -25921,24 +26685,15 @@ "Bearer Auth": [] } ], - "description": "Creates a new commit in a repository.\nRequires authentication and write access to the repository.", + "description": "Creates a new alert rule. The request body must be a JSON-encoded alert rule object that follows the CreateAlertRuleRequest schema.", "tags": [ - "commits" + "alert_rules" ], - "summary": "Create a commit", + "summary": "Create an alert rule", "parameters": [ { - "description": "Repository owner (tenant handle) or '-' for private repos", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Repository handle", - "name": "repo", + "description": "Session ID", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -25948,21 +26703,21 @@ ], "responses": { "201": { - "description": "Created", + "description": "Alert rule created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.CreateCommitResponse" + "$ref": "#/components/schemas/alerts.AlertRuleResponse" } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } @@ -25972,27 +26727,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "429": { + "description": "Alert Rule Limit Reached", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } @@ -26004,15 +26769,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.CreateCommitReq" + "$ref": "#/components/schemas/alerts.CreateAlertRuleRequest" } } } } } }, - "/commits/{owner}/{repo}/{commit}": { - "get": { + "/api/v1/platform/alerts/{session_id}/test": { + "post": { "security": [ { "API Key": [] @@ -26024,24 +26789,15 @@ "Bearer Auth": [] } ], - "description": "Retrieves a specific commit by hash, tag, or \"latest\" for a repository.\nThis endpoint supports both authenticated and unauthenticated access.\nAuthenticated users can access private repos, while unauthenticated users can only access public repos.\nCommit resolution logic:\n- \"latest\" or empty: Get the most recent commit\n- Less than 8 characters: Only check for tags\n- 8 or more characters: Prioritize commit hash over tag, check both", + "description": "Tests an alert action which will fire a notification to all configured recipients if the configuration is valid.", "tags": [ - "commits" + "alert_rules" ], - "summary": "Get a commit", + "summary": "Test an alert action to determine if configuration is valid", "parameters": [ { - "description": "Repository owner (tenant handle) or '-' for private repos", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Repository handle", - "name": "repo", + "description": "Session ID", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -26049,89 +26805,77 @@ } }, { - "description": "Commit hash, tag, or 'latest'", - "name": "commit", + "description": "Alert rule ID", + "name": "alert_rule_id", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "name": "get_examples", - "in": "query", - "schema": { - "type": "boolean", - "default": false, - "title": "Get Examples" - } - }, - { - "description": "Comma-separated list of optional fields: \"model\", \"is_draft\"", - "name": "include", - "in": "query", - "schema": { - "type": "string", - "title": "Include" - } - }, - { - "description": "Deprecated: use Include instead", - "name": "include_model", - "in": "query", - "schema": { - "type": "boolean", - "default": false, - "title": "Include Model" - } - }, - { - "name": "is_view", - "in": "query", - "schema": { - "type": "boolean", - "default": false, - "title": "Is View" - } } ], "responses": { "200": { - "description": "OK", + "description": "Alert action fired successfully", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.CommitResponse" + "type": "object", + "additionalProperties": { + "allOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] + } } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } @@ -26140,7 +26884,7 @@ "x-public": true } }, - "/datasets/{dataset_id}/experiment-view-overrides": { + "/api/v1/platform/alerts/{session_id}/{alert_rule_id}": { "get": { "security": [ { @@ -26153,94 +26897,96 @@ "Bearer Auth": [] } ], - "description": "Retrieves all experiment view override configurations for a specific dataset.\nThis endpoint returns column display overrides including color gradients,\nprecision settings, and column visibility configurations that customize how\nexperiment results are displayed in the UI.\n\nThe response includes all column overrides with their display settings:\n- Column identifiers (must start with inputs, outputs, reference_outputs, feedback, metrics, attachments, or metadata)\n- Color gradients for numeric data visualization\n- Precision settings for numeric columns (1-6 decimal places)\n- Hide flags to control column visibility", + "description": "Gets an alert rule.", "tags": [ - "experiment-view-overrides" + "alert_rules" ], - "summary": "Get experiment view override configurations for a dataset", + "summary": "Get an alert rule", "parameters": [ { - "example": "\"550e8400-e29b-41d4-a716-446655440000\"", - "description": "Dataset ID", - "name": "dataset_id", + "description": "Session ID", + "name": "session_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "description": "Alert rule ID", + "name": "alert_rule_id", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], "responses": { "200": { - "description": "Successfully retrieved experiment view override configurations", + "description": "Alert rule", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" - } + "$ref": "#/components/schemas/alerts.AlertRuleResponse" } } } }, "400": { - "description": "Invalid dataset ID format\" example({\"error\":\"invalid dataset ID format\"})", + "description": "Bad request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, "404": { - "description": "Dataset not found or not accessible\" example({\"error\":\"dataset not found or not accessible\"})", + "description": "Not found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, "500": { - "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "description": "Internal server error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } - } - }, - "x-public": true - }, - "post": { + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.ErrorResponse" + } + } + } + } + }, + "x-public": true + }, + "delete": { "security": [ { "API Key": [] @@ -26252,129 +26998,111 @@ "Bearer Auth": [] } ], - "description": "Creates a new experiment view override configuration for a dataset with column display settings.\nThis endpoint allows you to customize how experiment results are displayed by configuring\ncolumn-specific overrides including colors, precision, and visibility.\n\nThe request must include a 'column_overrides' array with at least one override configuration.\nEach column override can specify:\n- column: Required field name (must start with inputs, outputs, reference_outputs, feedback, metrics, attachments, or metadata)\n- color_gradient: Optional array of [number, color] tuples for numeric data visualization\n- precision: Optional number (1-6) for decimal places in numeric columns\n- hide: Optional boolean to control column visibility\n\nExample request body:\n{\n\"column_overrides\": [\n{\n\"column\": \"outputs.accuracy\",\n\"color_gradient\": [[0.0, \"#ff0000\"], [0.5, \"#ffff00\"], [1.0, \"#00ff00\"]],\n\"precision\": 3\n},\n{\n\"column\": \"inputs.model_type\",\n\"hide\": false\n}\n]\n}\n\nThis operation fails if an override already exists for the dataset (use PATCH to update).", + "description": "Deletes an alert rule", "tags": [ - "experiment-view-overrides" + "alert_rules" ], - "summary": "Create new experiment view override configuration for a dataset", + "summary": "Delete an alert rule", "parameters": [ { - "example": "\"550e8400-e29b-41d4-a716-446655440000\"", - "description": "Dataset ID", - "name": "dataset_id", + "description": "Session ID", + "name": "session_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "description": "Alert rule ID", + "name": "alert_rule_id", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], "responses": { - "201": { - "description": "Successfully created experiment view override", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" - } - } - } - }, - "400": { - "description": "Invalid request data\" example({\"error\":\"column_overrides field is required\"})", + "200": { + "description": "Alert rule deleted", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": { - "type": "string" + "allOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] } } } } }, - "401": { - "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "404": { - "description": "Dataset not found\" example({\"error\":\"dataset not found or not accessible\"})", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "409": { - "description": "Override already exists\" example({\"error\":\"experiment view override already exists\"})", + "404": { + "description": "Not found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "422": { - "description": "Validation error\" example({\"error\":\"column name at index 0 must start with one of: inputs, outputs, reference_outputs, feedback, metrics, attachments, metadata\"})", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "500": { - "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePostRequest" - } - } - } - } - } - }, - "/datasets/{dataset_id}/experiment-view-overrides/{id}": { - "get": { + "x-public": true + }, + "patch": { "security": [ { "API Key": [] @@ -26386,202 +27114,123 @@ "Bearer Auth": [] } ], - "description": "Retrieves a specific experiment view override configuration using both dataset ID and override ID.\nThis endpoint provides more precise access to experiment view overrides when you have\nthe specific override ID, useful for direct links or cached references.\n\nThe response includes the same column override information as the dataset-level endpoint:\n- Column identifiers with validation prefixes\n- Color gradient settings for numeric data visualization\n- Numeric precision configurations\n- Column visibility controls\n\nBoth the dataset and override must exist and be accessible by the authenticated user.", + "description": "Updates an alert rule.", "tags": [ - "experiment-view-overrides" + "alert_rules" ], - "summary": "Get experiment view override configuration by specific ID", + "summary": "Update an alert rule", "parameters": [ { - "example": "\"550e8400-e29b-41d4-a716-446655440000\"", - "description": "Dataset ID", - "name": "dataset_id", + "description": "Session ID", + "name": "session_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "example": "\"123e4567-e89b-12d3-a456-426614174000\"", - "description": "Experiment view override ID", - "name": "id", + "description": "Alert rule ID", + "name": "alert_rule_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { "200": { - "description": "Successfully retrieved experiment view override configuration", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" - } - } - } - }, - "400": { - "description": "Invalid ID format\" example({\"error\":\"invalid experiment view override ID format\"})", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "401": { - "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "description": "Alert rule updated", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": { - "type": "string" + "allOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] } } } } }, - "404": { - "description": "Override not found\" example({\"error\":\"experiment view override not found\"})", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "500": { - "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } - } - }, - "x-public": true - }, - "delete": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Permanently deletes an experiment view override configuration for a dataset.\nThis operation removes all column override settings including color gradients,\nprecision configurations, and visibility settings.\n\nAfter deletion, the experiment view will revert to default column display settings.\nThis action cannot be undone - you will need to recreate the override configuration\nif you want to restore custom column settings.\n\nBoth the dataset and override must exist and be accessible by the authenticated user.\nThe operation will fail if the override doesn't exist or if the user doesn't have\nappropriate permissions for the dataset.", - "tags": [ - "experiment-view-overrides" - ], - "summary": "Delete experiment view override configuration", - "parameters": [ - { - "example": "\"550e8400-e29b-41d4-a716-446655440000\"", - "description": "Dataset ID", - "name": "dataset_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "example": "\"123e4567-e89b-12d3-a456-426614174000\"", - "description": "Experiment view override ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "Successfully deleted experiment view override (no content returned)" }, - "400": { - "description": "Invalid ID format\" example({\"error\":\"invalid experiment view override ID format\"})", + "404": { + "description": "Not found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "404": { - "description": "Override not found\" example({\"error\":\"experiment view override not found\"})", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } - }, - "500": { - "description": "Internal server error\" example({\"error\":\"internal server error\"})", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.UpdateAlertRuleRequest" } } } - }, - "x-public": true - }, - "patch": { + } + } + }, + "/api/v1/platform/annotation-queues/items/{queue_item_id}/status": { + "post": { "security": [ { "API Key": [] @@ -26593,107 +27242,69 @@ "Bearer Auth": [] } ], - "description": "Updates an existing experiment view override configuration by completely replacing\nthe column overrides for the specified dataset and override ID.\n\nThis endpoint performs a complete replacement of the column overrides configuration.\nAll existing column overrides will be replaced with the new configuration provided\nin the request body. To add or modify individual columns, include the complete\ndesired configuration in the request.\n\nThe request format is identical to the create endpoint:\n- column_overrides: Required array with at least one override configuration\n- Each override can specify color gradients, precision, and visibility\n\nExample request body:\n{\n\"column_overrides\": [\n{\n\"column\": \"metrics.f1_score\",\n\"color_gradient\": [[0.0, \"#ff4444\"], [0.8, \"#44ff44\"]],\n\"precision\": 4\n},\n{\n\"column\": \"feedback.rating\",\n\"hide\": false\n}\n]\n}\n\nBoth the dataset and override must exist and be accessible by the authenticated user.", + "description": "Log the caller's reviewer status for a RUN or THREAD annotation queue item. A null status re-shows the item for this reviewer.", "tags": [ - "experiment-view-overrides" + "annotation_queues" ], - "summary": "Update existing experiment view override configuration", + "summary": "Create annotation queue item status", "parameters": [ { - "example": "\"550e8400-e29b-41d4-a716-446655440000\"", - "description": "Dataset ID", - "name": "dataset_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "example": "\"123e4567-e89b-12d3-a456-426614174000\"", - "description": "Experiment view override ID", - "name": "id", + "description": "Annotation queue item ID", + "name": "queue_item_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { "200": { - "description": "Successfully updated experiment view override", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + "$ref": "#/components/schemas/annotationqueues.CreateAnnotationQueueItemStatusResponse" } } } }, "400": { - "description": "Invalid request data\" example({\"error\":\"invalid experiment view override ID format\"})", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Override not found\" example({\"error\":\"experiment view override not found\"})", + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "422": { - "description": "Validation error\" example({\"error\":\"'precision' must be between 1 and 6 for column at index 0\"})", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "500": { - "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -26705,14 +27316,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePatchRequest" + "$ref": "#/components/schemas/annotationqueues.CreateAnnotationQueueItemStatusRequest" } } } } } }, - "/issues-agent/lcu-spend": { + "/api/v1/platform/annotation-queues/{queue_id}/items": { "get": { "security": [ { @@ -26725,28 +27336,80 @@ "Bearer Auth": [] } ], - "description": "Returns one flat row per (tenant, session) pair in the\ncaller's organization that has Engine spend in the\nwindow, each carrying its workspace name, project\n(session) name, and Engine LCU spend. The caller groups\nrows by tenant for display and sums the `lcu_total`\nfield across items for the org-wide total (the UI tile\ndoes both). The window defaults to the current calendar\nmonth (UTC) and can be overridden with `start` and `end`\n(RFC 3339, capped at 31 days). Hours where the rate card\ndid not price a (provider, model) pair are excluded from\neach row's `lcu_total` and surfaced as\n`lcu_unpriced_row_count` so callers can detect billing\ncoverage gaps without inflating the spend number.", + "description": "List RUN and THREAD items in a single annotation queue for one review status section, with opaque cursor pagination. Optional item_type=RUN|THREAD filters the page. direction=backward returns items before the supplied cursor. The response contains item metadata only, not expanded run or thread payloads. status=archived returns items whose queue review requirements have been satisfied, not merely items the caller personally marked completed.", "tags": [ - "issues-agent" + "annotation_queues" ], - "summary": "Get issues-agent (Engine) LCU spend per project for the calling org", + "summary": "List annotation queue items", "parameters": [ { - "description": "Inclusive window start, RFC 3339. Defaults to first instant of current calendar month (UTC).", - "name": "start", + "description": "Annotation queue ID", + "name": "queue_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Review section: needs_my_review, needs_others_review, or archived", + "name": "status", + "in": "query", + "required": true, + "schema": { + "enum": [ + "needs_my_review", + "needs_others_review", + "archived" + ], + "type": "string", + "title": "Status" + } + }, + { + "description": "Page size (max 100)", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "default": 20, + "title": "Page Size" + } + }, + { + "description": "Opaque pagination cursor", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + }, + { + "description": "Filter to RUN or THREAD", + "name": "item_type", "in": "query", "schema": { + "enum": [ + "RUN", + "THREAD" + ], "type": "string", - "title": "Start" + "title": "Item Type" } }, { - "description": "Exclusive window end, RFC 3339. Defaults to first instant of next calendar month (UTC).", - "name": "end", + "description": "Pagination direction. backward requires cursor", + "name": "direction", "in": "query", "schema": { + "enum": [ + "forward", + "backward" + ], "type": "string", - "title": "End" + "default": "forward", + "title": "Direction" } } ], @@ -26756,7 +27419,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendResponse" + "$ref": "#/components/schemas/annotationqueues.ListAnnotationQueueItemsResponse" } } } @@ -26766,7 +27429,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -26776,27 +27439,25 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, "x-public": true - } - }, - "/me/providers/{providerType}": { - "get": { + }, + "post": { "security": [ { "API Key": [] @@ -26808,29 +27469,38 @@ "Bearer Auth": [] } ], - "description": "Returns the provider user ID associated with the authenticated user for a given provider type, or null if not set. Scoped to the current tenant.", + "description": "Add RUN or THREAD items to a single annotation queue. RUN items require run_id unless they are created from a suggested example. THREAD items require thread_id and project_id.", "tags": [ - "me" + "annotation_queues" ], - "summary": "Get the authenticated user's provider user ID", + "summary": "Add annotation queue items", "parameters": [ { - "description": "Provider type (e.g. slack, github)", - "name": "providerType", + "description": "Annotation queue ID", + "name": "queue_id", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Extend trace retention for added run items", + "name": "extend_trace_retention", + "in": "query", + "schema": { + "type": "boolean", + "title": "Extend Trace Retention" + } } ], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/annotationqueues.AddAnnotationQueueItemsResponse" } } } @@ -26840,36 +27510,56 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/annotationqueues.AddAnnotationQueueItemsRequest" + } + } + } + } } }, - "/oauth/authorize": { + "/api/v1/platform/annotation-queues/{queue_id}/items/count": { "get": { "security": [ { @@ -26882,112 +27572,63 @@ "Bearer Auth": [] } ], - "description": "Validates authorization request parameters and redirects to the frontend consent page per RFC 6749.", + "description": "Returns the number of annotation queue items for the requested reviewer-specific or archived bucket.", "tags": [ - "oauth" + "annotation_queues" ], - "summary": "Initiate OAuth2 authorization", + "summary": "Get the annotation queue item count", "parameters": [ { - "description": "Must be 'code'", - "name": "response_type", - "in": "query", + "description": "Queue ID", + "name": "queue_id", + "in": "path", "required": true, "schema": { - "type": "string", - "title": "Response Type" + "type": "string" } }, { - "description": "OAuth2 client ID", - "name": "client_id", + "description": "Count bucket: all, needs_my_review, needs_others_review, or archived.", + "name": "status", "in": "query", "required": true, "schema": { "type": "string", - "title": "Client Id" + "title": "Status" } }, { - "description": "Redirect URI registered with the client", - "name": "redirect_uri", + "description": "Exclusive lower bound for archived item timestamp", + "name": "start_time", "in": "query", - "required": true, "schema": { "type": "string", - "title": "Redirect Uri" - } - }, - { - "description": "PKCE code challenge", - "name": "code_challenge", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Code Challenge" - } - }, - { - "description": "PKCE method, must be 'S256'", - "name": "code_challenge_method", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Code Challenge Method" + "title": "Start Time" } }, { - "description": "Opaque state value to prevent CSRF", - "name": "state", + "description": "Exclusive upper bound for archived item timestamp", + "name": "end_time", "in": "query", "schema": { "type": "string", - "title": "State" + "title": "End Time" } } ], "responses": { - "302": { - "description": "Found" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemCountResponse" } } } - } - }, - "x-public": true - } - }, - "/oauth/authorize/approve": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] }, - { - "Bearer Auth": [] - } - ], - "description": "Issues an authorization code after the authenticated user approves the request. Called by the frontend consent page. Requires authentication.", - "tags": [ - "oauth" - ], - "summary": "Approve OAuth2 authorization request", - "parameters": [], - "responses": { - "200": { - "description": "JSON body with redirect_uri the frontend should navigate the browser to", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -26999,32 +27640,41 @@ } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -27034,73 +27684,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "organization_id": { - "type": "string", - "description": "Organization ID; must match the authenticated org" - }, - "workspace_id": { - "type": "string", - "description": "Default workspace ID; must belong to organization and be accessible to user" - }, - "client_id": { - "type": "string", - "description": "OAuth2 client ID" - }, - "redirect_uri": { - "type": "string", - "description": "Redirect URI registered with the client" - }, - "code_challenge": { - "type": "string", - "description": "PKCE code challenge" - }, - "code_challenge_method": { - "type": "string", - "description": "PKCE method, must be 'S256'" - }, - "state": { - "type": "string", - "description": "Opaque state value to prevent CSRF" - } - }, - "required": [ - "organization_id", - "client_id", - "redirect_uri", - "code_challenge", - "code_challenge_method" - ] - } - } - } - } + "x-public": true } }, - "/oauth/client/{clientID}": { - "get": { - "description": "Returns the display metadata (name, logo, homepage/terms/privacy links) for a registered OAuth2 client. Used by the consent screen to show a human-readable client identity instead of the raw client_id. Public endpoint; exposes only non-sensitive display fields.", + "/api/v1/platform/annotation-queues/{queue_id}/items/delete": { + "post": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Remove RUN or THREAD items from a single annotation queue by item ID.", "tags": [ - "oauth" + "annotation_queues" ], - "summary": "Get public OAuth2 client metadata", + "summary": "Delete annotation queue items", "parameters": [ { - "description": "OAuth2 client ID", - "name": "clientID", + "description": "Annotation queue ID", + "name": "queue_id", "in": "path", "required": true, "schema": { @@ -27114,7 +27731,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.ClientPublicMetadata" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -27124,7 +27744,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -27134,17 +27764,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/annotationqueues.DeleteAnnotationQueueItemsRequest" + } + } + } + } } }, - "/oauth/device/authorize": { - "post": { + "/api/v1/platform/annotation-queues/{queue_id}/items/{item_id}": { + "patch": { "security": [ { "API Key": [] @@ -27156,22 +27806,38 @@ "Bearer Auth": [] } ], - "description": "Marks a device code as authorized for the authenticated user. Called by the /activate page when the user enters their user code. Requires authentication.", + "description": "Partially update mutable timestamps (added_at, last_reviewed_time) for a RUN or THREAD annotation queue item. Omit a field, or pass JSON null, to leave it unchanged.", "tags": [ - "oauth" + "annotation_queues" + ], + "summary": "Update an annotation queue item", + "parameters": [ + { + "description": "Annotation queue ID", + "name": "queue_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Annotation queue item ID", + "name": "item_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Authorize a device code", - "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItem" } } } @@ -27181,27 +27847,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -27211,35 +27887,17 @@ "requestBody": { "required": true, "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "organization_id": { - "type": "string", - "description": "Organization ID; must match the authenticated org" - }, - "workspace_id": { - "type": "string", - "description": "Default workspace ID; must belong to organization and be accessible to user" - }, - "user_code": { - "type": "string", - "description": "User code displayed on the device" - } - }, - "required": [ - "organization_id", - "user_code" - ] + "$ref": "#/components/schemas/annotationqueues.PatchAnnotationQueueItemRequest" } } } } } }, - "/oauth/device/code": { - "post": { + "/api/v1/platform/annotation-queues/{queue_id}/items/{item_id}/placement": { + "get": { "security": [ { "API Key": [] @@ -27251,19 +27909,38 @@ "Bearer Auth": [] } ], - "description": "Issues a device code and user code for the device authorization flow per RFC 8628.", + "description": "Resolve a RUN or THREAD item to its current review section and zero-based position for deep linking.", "tags": [ - "oauth" + "annotation_queues" + ], + "summary": "Get annotation queue item placement", + "parameters": [ + { + "description": "Annotation queue ID", + "name": "queue_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Annotation queue item ID", + "name": "item_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Request OAuth2 device authorization", - "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.DeviceCodeResponse" + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemPlacementResponse" } } } @@ -27273,45 +27950,36 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "description": "OAuth2 client ID" - } - }, - "required": [ - "client_id" - ] + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } } } } - } + }, + "x-public": true } }, - "/oauth/register": { + "/api/v1/platform/annotation-queues/{queue_id}/reviewers": { "post": { "security": [ { @@ -27324,19 +27992,29 @@ "Bearer Auth": [] } ], - "description": "Public RFC 7591 Dynamic Client Registration endpoint. Only mints public clients with allowed loopback, HTTPS, or native client redirect URIs. Body limit 8 KB.", + "description": "Assigns a single identity as a reviewer for the queue. Idempotent.", "tags": [ - "oauth" + "annotation_queues" + ], + "summary": "Add a reviewer to an annotation queue", + "parameters": [ + { + "description": "Queue ID", + "name": "queue_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Register an OAuth2 dynamic client", - "parameters": [], "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.ClientRegistrationResponse" + "$ref": "#/components/schemas/annotationqueues.AddReviewerResponse" } } } @@ -27346,17 +28024,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "413": { - "description": "Request Entity Too Large", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -27366,7 +28050,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -27378,15 +28065,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.ClientRegistrationRequest" + "$ref": "#/components/schemas/annotationqueues.AddReviewerRequest" } } } } } }, - "/oauth/revoke": { - "post": { + "/api/v1/platform/annotation-queues/{queue_id}/reviewers/{identity_id}": { + "delete": { "security": [ { "API Key": [] @@ -27398,40 +28085,79 @@ "Bearer Auth": [] } ], - "description": "Revokes an access token or refresh token per RFC 7009. Always returns 200 regardless of whether the token was found.", + "description": "Unassigns an identity as a reviewer for the queue. Idempotent.", "tags": [ - "oauth" + "annotation_queues" ], - "summary": "Revoke an OAuth2 token", - "parameters": [], - "responses": { - "200": { - "description": "OK" + "summary": "Remove a reviewer from an annotation queue", + "parameters": [ + { + "description": "Queue ID", + "name": "queue_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Identity ID of the reviewer to remove", + "name": "identity_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "token": { - "type": "string", - "description": "Token to revoke (access token or refresh token)" + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" } - }, - "required": [ - "token" - ] + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } } } } - } + }, + "x-public": true } }, - "/oauth/token": { + "/api/v1/platform/datasets/examples/delete": { "post": { "security": [ { @@ -27444,11 +28170,11 @@ "Bearer Auth": [] } ], - "description": "Token endpoint that dispatches by grant_type: authorization_code, urn:ietf:params:oauth:grant-type:device_code, or refresh_token.", + "description": "This endpoint hard deletes *all* versions of a dataset example(s).\nDeletion is performed by setting inputs, outputs, and metadata to null and deleting attachment files while keeping the example ID, dataset ID, and creation timestamp.\nIMPORTANT: attachment files can take up to 7 days to be deleted. inputs, outputs and metadata are nullified immediately.", "tags": [ - "oauth" + "examples" ], - "summary": "Exchange grant for OAuth2 tokens", + "summary": "Hard Delete Examples", "parameters": [], "responses": { "200": { @@ -27456,7 +28182,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenResponse" + "$ref": "#/components/schemas/examples.ExamplesDeletedResponse" } } } @@ -27466,17 +28192,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/examples.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/examples.ErrorResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/examples.ErrorResponse" } } } @@ -27486,224 +28232,221 @@ "requestBody": { "required": true, "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "grant_type": { - "type": "string", - "description": "Grant type: authorization_code, urn:ietf:params:oauth:grant-type:device_code, or refresh_token" - }, - "client_id": { - "type": "string", - "description": "OAuth2 client ID" - }, - "code": { - "type": "string", - "description": "Authorization code (authorization_code grant)" - }, - "code_verifier": { - "type": "string", - "description": "PKCE code verifier (authorization_code grant)" - }, - "redirect_uri": { - "type": "string", - "description": "Redirect URI (authorization_code grant)" - }, - "device_code": { - "type": "string", - "description": "Device code (device_code grant)" - }, - "refresh_token": { - "type": "string", - "description": "Refresh token (refresh_token grant)" - } - }, - "required": [ - "grant_type", - "client_id" - ] + "$ref": "#/components/schemas/examples.DeleteExamplesRequest" } } } } } }, - "/orgs/current/data-planes": { - "get": { + "/api/v1/platform/datasets/{dataset_id}/examples": { + "post": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns up to 50 data planes owned by the caller's organization. Sorted status priority (active first), then newest first. Requires BYOC to be enabled for the org.", + "description": "This endpoint allows clients to upload examples to a specified dataset by sending a multipart/form-data POST request.\nEach form part contains either JSON-encoded data or binary attachment files associated with an example.", "tags": [ - "data_planes" + "examples" + ], + "summary": "Upload Examples", + "parameters": [ + { + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } ], - "summary": "List data planes for the current organization", "responses": { - "200": { - "description": "Data planes", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/data_planes.ListPublicDataPlanesResponse" + "$ref": "#/components/schemas/examples.ExamplesCreatedResponse" } } } }, "400": { - "description": "Invalid organization ID", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "403": { - "description": "BYOC not enabled for this organization", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } } }, "x-public": true, - "parameters": [] + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "{example_id}": { + "type": "string", + "format": "binary", + "description": "The Example info as JSON. Can have fields 'metadata', 'split', 'use_source_run_io', 'source_run_id', 'created_at', 'modified_at'" + }, + "{example_id}.inputs": { + "type": "string", + "format": "binary", + "description": "The Example inputs as JSON" + }, + "{example_id}.outputs": { + "type": "string", + "format": "binary", + "description": "THe Example outputs as JSON" + }, + "{example_id}.attachments.{name}": { + "type": "string", + "format": "binary", + "description": "File attachment named {name}" + } + }, + "required": [ + "{example_id}", + "{example_id}.inputs" + ] + } + } + } + } }, - "post": { + "patch": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Creates a new data plane object. Persists the rendered data plane spec, and returns 202 with the data plane in status=requested. Requires BYOC enabled org and org admin.", + "description": "This endpoint allows clients to update existing examples in a specified dataset by sending a multipart/form-data PATCH request.\nEach form part contains either JSON-encoded data or binary attachment files to update an example.", "tags": [ - "data_planes" + "examples" + ], + "summary": "Update Examples", + "parameters": [ + { + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } ], - "summary": "Create a new data plane", - "parameters": [], "responses": { - "202": { - "description": "Data plane requested", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/data_planes.PublicDataPlane" + "$ref": "#/components/schemas/examples.ExamplesUpdatedResponse" } } } }, "400": { - "description": "Invalid input", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "403": { - "description": "BYOC not enabled or insufficient permissions", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, "409": { - "description": "Name already exists for this organization", + "description": "Conflict", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } @@ -27713,16 +28456,46 @@ "requestBody": { "required": true, "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/data_planes.CreateDataPlaneRequestAws" + "type": "object", + "properties": { + "{example_id}": { + "type": "string", + "format": "binary", + "description": "The Example update info as JSON. Can have fields 'metadata', 'split'" + }, + "{example_id}.inputs": { + "type": "string", + "format": "binary", + "description": "The updated Example inputs as JSON" + }, + "{example_id}.outputs": { + "type": "string", + "format": "binary", + "description": "The updated Example outputs as JSON" + }, + "{example_id}.attachments_operations": { + "type": "string", + "format": "binary", + "description": "JSON describing attachment operations (retain, rename)" + }, + "{example_id}.attachment.{name}": { + "type": "string", + "format": "binary", + "description": "New file attachment named {name}" + } + }, + "required": [ + "{example_id}" + ] } } } } } }, - "/repos/{owner}/{repo}/tags/{tag_name}/history": { + "/api/v1/platform/evaluators": { "get": { "security": [ { @@ -27735,55 +28508,100 @@ "Bearer Auth": [] } ], - "description": "Returns the paginated audit log of transitions for a specific\ntag in a repository. Each entry records a commit change\n(from_commit → to_commit) along with who performed it.", + "description": "List evaluators for the current workspace, with optional filtering by type, name, tag, feedback key, or resource ID.", "tags": [ - "tag-transitions" + "evaluators" ], - "summary": "Get tag transition history", + "summary": "List evaluators", "parameters": [ { - "description": "Repository owner (tenant handle)", - "name": "owner", - "in": "path", - "required": true, + "description": "Filter by evaluator type", + "name": "type", + "in": "query", "schema": { - "type": "string" + "type": "string", + "title": "Type" } }, { - "description": "Repository handle", - "name": "repo", - "in": "path", - "required": true, + "description": "Filter by name substring (also searches creator names)", + "name": "name_contains", + "in": "query", "schema": { - "type": "string" + "type": "string", + "title": "Name Contains" } }, { - "description": "Tag name", - "name": "tag_name", - "in": "path", - "required": true, + "description": "Filter by tag value IDs", + "name": "tag_value_id", + "in": "query", + "style": "form", + "explode": false, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + }, + "title": "Tag Value Id" + } + }, + { + "description": "Filter by feedback key", + "name": "feedback_key", + "in": "query", + "schema": { + "type": "string", + "title": "Feedback Key" + } + }, + { + "description": "Filter by resource IDs", + "name": "resource_id", + "in": "query", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Resource Id" + } + }, + { + "description": "Field to sort by", + "name": "sort_by", + "in": "query", + "schema": { + "type": "string", + "title": "Sort By" + } + }, + { + "description": "Sort in descending order", + "name": "sort_by_desc", + "in": "query", + "schema": { + "type": "boolean", + "title": "Sort By Desc" } }, { + "description": "Maximum number of results (1-100)", "name": "limit", "in": "query", "schema": { - "minimum": 1, "type": "integer", - "maximum": 100, - "default": 50, + "default": 100, "title": "Limit" } }, { + "description": "Offset for pagination", "name": "offset", "in": "query", "schema": { - "minimum": 0, "type": "integer", "default": 0, "title": "Offset" @@ -27796,7 +28614,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.TagTransitionHistoryResponse" + "$ref": "#/components/schemas/evaluators.ListEvaluatorsResponse" } } } @@ -27806,17 +28624,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -27826,16 +28654,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } }, "x-public": true - } - }, - "/runs": { + }, "post": { "security": [ { @@ -27848,34 +28674,19 @@ "Bearer Auth": [] } ], - "description": "Queues a single run for ingestion. The request body must be a JSON-encoded run object that follows the Run schema.", + "description": "Create a new LLM or code evaluator for the current workspace.", "tags": [ - "runs" + "evaluators" ], - "summary": "Create a Run", + "summary": "Create evaluator", "parameters": [], "responses": { - "202": { - "description": "Run created", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] - } + "$ref": "#/components/schemas/evaluators.CreateEvaluatorResponse" } } } @@ -27885,47 +28696,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -27937,15 +28738,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.Run" + "$ref": "#/components/schemas/evaluators.CreateEvaluatorRequest" } } } } - } - }, - "/runs/batch": { - "post": { + }, + "delete": { "security": [ { "API Key": [] @@ -27957,34 +28756,44 @@ "Bearer Auth": [] } ], - "description": "Ingests a batch of runs in a single JSON payload. The payload must have `post` and/or `patch` arrays containing run objects.\nPrefer this endpoint over single‑run ingestion when submitting hundreds of runs, but `/runs/multipart` offers better handling for very large fields and attachments.", + "description": "Delete multiple evaluators by their IDs. Returns per-item success/failure.", "tags": [ - "runs" + "evaluators" + ], + "summary": "Bulk delete evaluators", + "parameters": [ + { + "description": "Evaluator IDs to delete", + "name": "evaluator_ids", + "in": "query", + "required": true, + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Evaluator Ids" + } + }, + { + "description": "When true, delete all run rules for this evaluator before deleting the evaluator", + "name": "delete_run_rules", + "in": "query", + "schema": { + "type": "boolean", + "title": "Delete Run Rules" + } + } ], - "summary": "Ingest Runs (Batch JSON)", - "parameters": [], "responses": { - "202": { - "description": "Runs batch ingested", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] - } + "$ref": "#/components/schemas/evaluators.BulkDeleteEvaluatorsResponse" } } } @@ -27994,118 +28803,150 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "413": { - "description": "Request Entity Too Large", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } + } + }, + "x-public": true + } + }, + "/api/v1/platform/evaluators/spend": { + "get": { + "security": [ + { + "API Key": [] }, - "422": { - "description": "Unprocessable Entity", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" - } - } - } + { + "Tenant ID": [] }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" - } - } - } + { + "Bearer Auth": [] } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "patch": { - "type": "array", - "items": { - "$ref": "#/components/schemas/runs.Run" - } - }, - "post": { - "type": "array", - "items": { - "$ref": "#/components/schemas/runs.Run" - } - } - } - } + ], + "description": "Returns per-day LLM evaluator spend for the requested 7-day period, grouped by evaluator, resource, or run rule. Exactly one of group_by, evaluator_id, session_id, or dataset_id is required. resource_id, type, and feedback_key may be supplied with group_by to narrow listing aggregations.", + "tags": [ + "evaluators" + ], + "summary": "Get evaluator spend", + "parameters": [ + { + "description": "Aggregation mode: 'evaluator', 'resource', or 'run_rule'. Mutually exclusive with entity filters.", + "name": "group_by", + "in": "query", + "schema": { + "type": "string", + "title": "Group By" } - } - } - } - }, - "/runs/multipart": { - "post": { - "security": [ + }, { - "API Key": [] + "description": "Filter to a specific evaluator (UUID). Mutually exclusive with group_by.", + "name": "evaluator_id", + "in": "query", + "schema": { + "type": "string", + "title": "Evaluator Id" + } }, { - "Tenant ID": [] + "description": "Filter to a specific project (UUID). Mutually exclusive with group_by.", + "name": "session_id", + "in": "query", + "schema": { + "type": "string", + "title": "Session Id" + } }, { - "Bearer Auth": [] + "description": "Filter to a specific dataset (UUID). Mutually exclusive with group_by.", + "name": "dataset_id", + "in": "query", + "schema": { + "type": "string", + "title": "Dataset Id" + } + }, + { + "description": "Filter grouped results to evaluators attached to all supplied project or dataset IDs. Only valid with group_by.", + "name": "resource_id", + "in": "query", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Resource Id" + } + }, + { + "description": "Filter grouped results by evaluator type: 'llm' or 'code'. Only valid with group_by.", + "name": "type", + "in": "query", + "schema": { + "type": "string", + "title": "Type" + } + }, + { + "description": "Filter grouped results by evaluator feedback key. Only valid with group_by.", + "name": "feedback_key", + "in": "query", + "schema": { + "type": "string", + "title": "Feedback Key" + } + }, + { + "description": "Start of the 7-day window (YYYY-MM-DD).", + "name": "period_start", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Period Start" + } } ], - "description": "Ingests multiple runs, feedback objects, and binary attachments in a single `multipart/form-data` request.\n**Part‑name pattern**: `.[.]` where `event` ∈ {`post`, `patch`, `feedback`, `attachment`}.\n* `post|patch.` – JSON run payload.\n* `post|patch..` – out‑of‑band run data (`inputs`, `outputs`, `events`, `error`, `extra`, `serialized`).\n* `feedback.` – JSON feedback payload (must include `trace_id`).\n* `attachment..` – arbitrary binary attachment stored in S3.\n**Headers**: every part must set `Content-Type` **and** either a `Content-Length` header or `length` parameter. Per‑part `Content-Encoding` is **not** allowed; the top‑level request may be `Content-Encoding: gzip` or `Content-Encoding: zstd`.\n**Best performance** for high‑volume ingestion.", - "tags": [ - "runs" - ], - "summary": "Ingest Runs (Multipart)", - "parameters": [], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.GetEvaluatorSpendResponse" } } } @@ -28115,109 +28956,57 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "413": { - "description": "Request Entity Too Large", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "post.{run_id}": { - "type": "string", - "format": "binary", - "description": "Run to create (JSON)" - }, - "patch.{run_id}": { - "type": "string", - "format": "binary", - "description": "Run to update (JSON)" - }, - "post.{run_id}.inputs": { - "type": "string", - "format": "binary", - "description": "Large inputs object (JSON) stored out‑of‑band" - }, - "patch.{run_id}.outputs": { - "type": "string", - "format": "binary", - "description": "Large outputs object (JSON) stored out‑of‑band" - }, - "feedback.{run_id}": { - "type": "string", - "format": "binary", - "description": "Feedback object (JSON) – must include trace_id" - }, - "attachment.{run_id}.{filename}": { - "type": "string", - "format": "binary", - "description": "Binary attachment linked to run {run_id}" - } - } - } - } - } - } + "x-public": true } }, - "/runs/{run_id}": { - "patch": { + "/api/v1/platform/evaluators/{evaluator_id}": { + "get": { "security": [ { "API Key": [] @@ -28229,45 +29018,29 @@ "Bearer Auth": [] } ], - "description": "Updates a run identified by its ID. The body should contain only the fields to be changed; unknown fields are ignored.", + "description": "Retrieve a single evaluator by its ID.", "tags": [ - "runs" + "evaluators" ], - "summary": "Update a Run", + "summary": "Get evaluator", "parameters": [ { - "description": "Run ID", - "name": "run_id", + "description": "Evaluator ID", + "name": "evaluator_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "202": { - "description": "Run updated", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] - } + "$ref": "#/components/schemas/evaluators.Evaluator" } } } @@ -28277,77 +29050,55 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "429": { - "description": "Too Many Requests", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.Run" - } - } - } - } - } - }, - "/v1/agent-builder/integrations": { - "get": { + "x-public": true + }, + "delete": { "security": [ { "API Key": [] @@ -28359,31 +29110,51 @@ "Bearer Auth": [] } ], - "description": "Returns default policy, integration overrides, and known integrations for the current workspace.", + "description": "Delete an evaluator. When delete_run_rules is true, all run rules referencing this evaluator are deleted first (same tenant). Associated llm_evaluators and code_evaluators rows are removed by foreign-key cascade when the evaluator row is deleted.", "tags": [ - "integrations" + "evaluators" + ], + "summary": "Delete evaluator", + "parameters": [ + { + "description": "Evaluator ID", + "name": "evaluator_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "When true, delete all run rules for this evaluator before deleting the evaluator", + "name": "delete_run_rules", + "in": "query", + "schema": { + "type": "boolean", + "title": "Delete Run Rules" + } + } ], - "summary": "Get Agent Builder integrations settings", "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsPayload" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28393,10 +29164,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28406,10 +29174,17 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28419,19 +29194,15 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } }, - "x-public": true, - "parameters": [] + "x-public": true }, - "put": { + "patch": { "security": [ { "API Key": [] @@ -28443,19 +29214,29 @@ "Bearer Auth": [] } ], - "description": "Replaces default policy and integration overrides for the current workspace.", + "description": "Update an existing evaluator's name, LLM configuration, or code configuration.", "tags": [ - "integrations" + "evaluators" + ], + "summary": "Update evaluator", + "parameters": [ + { + "description": "Evaluator ID", + "name": "evaluator_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Update Agent Builder integrations settings", - "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsPayload" + "$ref": "#/components/schemas/evaluators.UpdateEvaluatorResponse" } } } @@ -28465,10 +29246,27 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/evaluators.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28478,10 +29276,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28491,10 +29286,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28506,75 +29298,61 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsUpdatePayload" + "$ref": "#/components/schemas/evaluators.UpdateEvaluatorRequest" } } } } } }, - "/v1/fleet/orgs": { + "/api/v1/platform/features": { "get": { "security": [ { "API Key": [] }, + { + "Tenant ID": [] + }, { "Bearer Auth": [] } ], - "description": "Returns the organizations the authenticated caller belongs to. This endpoint does not require X-Tenant-Id and is the entry point for Fleet bootstrap: take an organization's `id` and list its workspaces via GET /v1/fleet/orgs/{org_id}/tenants, then call workspace-scoped endpoints with that tenant's id in X-Tenant-Id.", + "description": "Returns a consolidated view of default models and disabled models per feature for the workspace.", "tags": [ - "fleet orgs" - ], - "summary": "List organizations", - "parameters": [ - { - "description": "Items per page (default 20, max 20)", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor returned by a prior response", - "name": "cursor", - "in": "query", - "schema": { - "type": "string", - "title": "Cursor" - } - } + "features" ], + "summary": "List feature configurations", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/orgs.ListOrgsResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/features.FeatureConfig" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/httperr.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/httperr.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28584,87 +29362,75 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/httperr.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, "x-public": true, - "x-hidden": true + "parameters": [] } }, - "/v1/fleet/orgs/{org_id}/tenants": { - "get": { + "/api/v1/platform/features/{feature}/default-model": { + "put": { "security": [ { "API Key": [] }, + { + "Tenant ID": [] + }, { "Bearer Auth": [] } ], - "description": "Returns the LangSmith tenants/workspaces visible to the authenticated caller in the requested organization. This endpoint does not require X-Tenant-Id and is intended for Fleet bootstrap.", + "description": "Sets or replaces the default model for a feature in the workspace.", "tags": [ - "fleet tenants" + "features" ], - "summary": "List tenants", + "summary": "Set default model for a feature", "parameters": [ { - "description": "Organization ID", - "name": "org_id", + "description": "Feature name", + "name": "feature", "in": "path", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, - { - "description": "Items per page (default 20, max 20)", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor returned by a prior response", - "name": "cursor", - "in": "query", - "schema": { - "type": "string", - "title": "Cursor" - } - } - ], - "responses": { - "200": { - "description": "OK", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tenants.ListTenantsResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tenants.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tenants.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28674,18 +29440,25 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tenants.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, "x-public": true, - "x-hidden": true - } - }, - "/v1/fleet/secrets": { - "get": { + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features.UpsertDefaultModelRequest" + } + } + } + } + }, + "delete": { "security": [ { "API Key": [] @@ -28697,58 +29470,32 @@ "Bearer Auth": [] } ], - "description": "Lists the names of secrets configured for the workspace. Use this to check which model API keys (see a model's required_secrets) are already set. Secret values are never returned. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", + "description": "Removes the default model for a feature in the workspace.", "tags": [ - "fleet secrets" + "features" ], - "summary": "List workspace secret names", + "summary": "Delete default model for a feature", "parameters": [ { - "description": "Items per page (1-100, default 20)", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor from a prior response's next_cursor", - "name": "cursor", - "in": "query", + "description": "Feature name", + "name": "feature", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Cursor" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/secrets.ListResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28758,7 +29505,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28768,16 +29515,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, - "x-public": true, - "x-hidden": true - }, - "post": { + "x-public": true + } + }, + "/api/v1/platform/features/{feature}/disabled-models": { + "put": { "security": [ { "API Key": [] @@ -28789,12 +29537,22 @@ "Bearer Auth": [] } ], - "description": "Sets or deletes multiple workspace secrets in one request, mirroring the upstream SecretUpsert contract. A null value deletes the key; a non-null value sets it. Values are never returned. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", + "description": "Adds a model to the disabled list for a feature in the workspace.", "tags": [ - "fleet secrets" + "features" + ], + "summary": "Disable a model for a feature", + "parameters": [ + { + "description": "Feature name", + "name": "feature", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Bulk set or delete workspace secrets", - "parameters": [], "responses": { "204": { "description": "No Content" @@ -28804,7 +29562,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28814,7 +29572,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28824,7 +29582,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28836,19 +29604,15 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/secrets.bulkUpsertItem" - } + "$ref": "#/components/schemas/features.DisableModelRequest" } } } - }, - "x-hidden": true + } } }, - "/v1/fleet/secrets/{name}": { - "put": { + "/api/v1/platform/features/{feature}/disabled-models/{model}": { + "delete": { "security": [ { "API Key": [] @@ -28860,15 +29624,24 @@ "Bearer Auth": [] } ], - "description": "Creates or updates a single workspace secret by name. The value is write-only and is never returned by any endpoint. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", + "description": "Removes a model from the disabled list for a feature in the workspace.", "tags": [ - "fleet secrets" + "features" ], - "summary": "Set a workspace secret", + "summary": "Re-enable a disabled model for a feature", "parameters": [ { - "description": "Secret name (e.g. ANTHROPIC_API_KEY)", - "name": "name", + "description": "Feature name", + "name": "feature", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Model name (URL-encoded)", + "name": "model", "in": "path", "required": true, "schema": { @@ -28885,7 +29658,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28895,7 +29668,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28905,63 +29678,79 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/secrets.putRequest" + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features.ErrorResponse" + } } } } }, - "x-hidden": true - }, - "delete": { + "x-public": true + } + }, + "/api/v1/platform/gateway-policies": { + "get": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Removes a single workspace secret by name. Succeeds whether or not the secret currently exists. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", + "description": "Returns every gateway policy in the current organization.\nThe response includes both admin-created policies and\nruntime-materialized children of `default_spend_cap` and\n`default_rate_limit` policies (children carry `parent_policy_id`).\n\n**Spend tracking:** each spend-cap policy carries\n`current_spend_usd` — the spend accumulated in the policy's\nactive window.\n\n**Filters** (all optional):\n- `policy_type` — `spend_cap`, `default_spend_cap`, `guard`, `route_config`, `rate_limit`, or `default_rate_limit`\n- `subject_matcher_key` + `subject_matcher_value` — narrow to\npolicies whose subject_matchers contain `{key, value}`\n\nFor batch lookups by a set of subject values (e.g. many\nrun_rule_ids at once), use POST\n`/v1/platform/gateway-policies/search`; it accepts the\nvalues in a JSON body and avoids the URL-length ceiling\nthat a repeated query param would hit at scale.", "tags": [ - "fleet secrets" + "gateway-policies" ], - "summary": "Delete a workspace secret", + "summary": "List gateway policies", "parameters": [ { - "description": "Secret name (e.g. ANTHROPIC_API_KEY)", - "name": "name", - "in": "path", - "required": true, + "description": "Filter by policy_type", + "name": "policy_type", + "in": "query", "schema": { - "type": "string" + "type": "string", + "title": "Policy Type" + } + }, + { + "description": "Filter by subject matcher key", + "name": "subject_matcher_key", + "in": "query", + "schema": { + "type": "string", + "title": "Subject Matcher Key" + } + }, + { + "description": "Filter by subject matcher value (paired with subject_matcher_key)", + "name": "subject_matcher_value", + "in": "query", + "schema": { + "type": "string", + "title": "Subject Matcher Value" } } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + } } } } @@ -28971,28 +29760,35 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "x-public": true, - "x-hidden": true - } - }, - "/v1/fleet/tenants/{tenant_id}/users/{id}": { - "get": { + "x-public": true + }, + "post": { "security": [ { "API Key": [] @@ -29001,78 +29797,59 @@ "Bearer Auth": [] } ], - "description": "Resolves a LangSmith user by ID within a tenant/workspace the caller can access. This endpoint does not require X-Tenant-Id because the tenant is part of the path.", + "description": "Creates a gateway policy for the calling organization.\n\n**policy_type** is one of `spend_cap`, `default_spend_cap`,\n`guard`, `route_config`, `rate_limit`, or `default_rate_limit`.\nThe shape of `config` depends on policy_type:\n- `spend_cap` / `default_spend_cap`:\n`{\"window\": \"hourly\"|\"daily\"|\"weekly\"|\"monthly\", \"limit_usd\": }`\n- `guard`:\n`{\"version\": 1, \"detect\": {\"pii\": , \"secrets\": }, \"timeout_seconds\": , \"timeout_action\": \"allow\"|\"block\"}`\n`timeout_seconds` (optional, 0.1–30) caps guard pipeline execution time; defaults to 2s. `timeout_action` defaults to `allow`.\n- `route_config`:\n`{\"strategy\": \"priority_fallback\", \"triggers\": {\"status_codes\": []}, \"fallbacks\": [{\"model_configs\": [{\"model_config_id\": \"\"}]}]}`\n`triggers` is required, with no default: `status_codes` must be a non-empty list (include 502 and 504 for upstream transport failures). `fallbacks` contains an entry whose `model_configs` are tried in priority order (1–5). `subject_matchers` must be a single `workspace_id` entry.\n- `rate_limit` / `default_rate_limit`:\n`{\"version\": 1, \"limits\": [{\"metric\": \"requests\"|\"tokens\", \"window\": \"minute\"|\"hour\", \"value\": }]}`\n`limits` must be non-empty; each `metric`/`window` pair may appear at most once. `value` is 1..1000000000000000.\n\n**subject_matchers** is a list of `{key, value}` pairs.\n`key` is one of `organization_id`, `workspace_id`, `user_id`,\n`api_key_id`, or `run_rule_id`. Multiple matchers AND together. A\n`default_spend_cap` or `default_rate_limit` uses `{key, value: \"\"}`\nso the runtime materializes a per-subject child for every distinct\nsubject of that kind it sees in request metadata.\n\n**action** is currently always `block`. Spend caps reject the\nrequest with 402 when the limit is hit; rate limits reject with\n429 (with a `Retry-After` hint) when a limit is exceeded; guard\npolicies redact matched content in-place before forwarding upstream.\n\n**Upsert by matchers:** for `spend_cap`, `default_spend_cap`,\n`rate_limit`, `default_rate_limit`, and `guard`, if a policy with\nthe same `subject_matchers` already exists in this organization,\nthe existing policy is updated in place instead of a duplicate\nbeing created. `id` is preserved. `route_config` does not upsert\nby matchers — name must be unique per organization (409 on\nconflict). Returns 201 either way.", "tags": [ - "fleet users" - ], - "summary": "Get Fleet user in tenant", - "parameters": [ - { - "description": "Tenant ID", - "name": "tenant_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "User ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "gateway-policies" ], + "summary": "Create a gateway policy", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.UserRef" + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" } } } }, "400": { - "description": "Bad Request", + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid auth", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "LLM Gateway not enabled for the organization, or caller lacks OrganizationManage", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "policy name conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29082,18 +29859,44 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, + "x-codeSamples": [ + { + "label": "spend_cap", + "lang": "json", + "source": "{\n \"name\": \"monthly-cap\",\n \"policy_type\": \"spend_cap\",\n \"action\": \"block\",\n \"subject_matchers\": [{\"key\":\"organization_id\",\"value\":\"\"}],\n \"config\": {\"window\": \"monthly\", \"limit_usd\": 100}\n}" + }, + { + "label": "guard", + "lang": "json", + "source": "{\n \"name\": \"redact-pii\",\n \"policy_type\": \"guard\",\n \"action\": \"block\",\n \"subject_matchers\": [{\"key\":\"organization_id\",\"value\":\"\"}],\n \"config\": {\"version\": 1, \"detect\": {\"pii\": true, \"secrets\": true}, \"timeout_seconds\": 3}\n}" + }, + { + "label": "route_config", + "lang": "json", + "source": "{\n \"name\": \"gpt-fallback\",\n \"policy_type\": \"route_config\",\n \"action\": \"block\",\n \"subject_matchers\": [{\"key\": \"workspace_id\", \"value\": \"\"}],\n \"config\": {\"strategy\": \"priority_fallback\", \"triggers\": {\"status_codes\": [429, 500, 502, 503, 504]}, \"fallbacks\": [{\"model_configs\": [{\"model_config_id\": \"11111111-1111-1111-1111-111111111111\"}]}]}\n}" + } + ], "x-public": true, - "x-hidden": true + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/gateway_policies.CreateGatewayPolicyRequest" + } + } + } + } } }, - "/v1/fleet/users/current": { - "get": { + "/api/v1/platform/gateway-policies/search": { + "post": { "security": [ { "API Key": [] @@ -29102,18 +29905,32 @@ "Bearer Auth": [] } ], - "description": "Returns the authenticated Fleet caller's user profile. This endpoint does not require X-Tenant-Id and is intended for Fleet bootstrap.", + "description": "Batch variant of GET /v1/platform/gateway-policies for\nfetching policies that match a set of subject_matcher_values\nunder one subject_matcher_key. Accepts the values in a JSON\nbody so callers can include hundreds of subject ids without\nbumping into per-server URL-length limits.\n\nVisibility, response shape, and matcher semantics are\nidentical to the GET list. With `subject_matcher_values`\nempty (or omitted) this returns the same result as GET\nwith only `policy_type` set.", "tags": [ - "fleet users" + "gateway-policies" ], - "summary": "Get current Fleet user", + "summary": "Search gateway policies by subject value set", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.User" + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + } + } + } + } + }, + "400": { + "description": "validation error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29123,17 +29940,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29143,332 +29960,329 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/users.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, "x-public": true, - "parameters": [], - "x-hidden": true + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/gateway_policies.SearchGatewayPoliciesRequest" + } + } + } + } } }, - "/v1/platform/alerts/{session_id}": { - "post": { + "/api/v1/platform/gateway-policies/{id}": { + "get": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Creates a new alert rule. The request body must be a JSON-encoded alert rule object that follows the CreateAlertRuleRequest schema.", + "description": "Returns a single gateway policy by id. Cross-org access is\nrejected with 404\n\n**Spend tracking:** spend-cap policies include\n`current_spend_usd` for the active window so callers can\nread per-policy cost without hitting a separate endpoint.\nGuard policies leave it null.", "tags": [ - "alert_rules" + "gateway-policies" ], - "summary": "Create an alert rule", + "summary": "Get a gateway policy", "parameters": [ { - "description": "Session ID", - "name": "session_id", + "description": "Policy ID", + "name": "id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { - "201": { - "description": "Alert rule created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.AlertRuleResponse" + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" } } } }, "400": { - "description": "Bad request", + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "429": { - "description": "Alert Rule Limit Reached", + "403": { + "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.CreateAlertRuleRequest" - } - } - } - } - } - }, - "/v1/platform/alerts/{session_id}/test": { - "post": { + "x-public": true + }, + "delete": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Tests an alert action which will fire a notification to all configured recipients if the configuration is valid.", + "description": "Deletes a gateway policy. Subsequent reads return 404.\n\n**default cascade:** deleting a `default_spend_cap` or\n`default_rate_limit` also deletes every child policy\nmaterialized from it.", "tags": [ - "alert_rules" + "gateway-policies" ], - "summary": "Test an alert action to determine if configuration is valid", + "summary": "Delete a gateway policy", "parameters": [ { - "description": "Session ID", - "name": "session_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Policy ID", + "name": "id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { - "200": { - "description": "Alert action fired successfully", + "204": { + "description": "No Content" + }, + "400": { + "description": "validation error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] - } + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "400": { - "description": "Bad request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "LLM Gateway not enabled, or caller lacks OrganizationManage", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/alerts/{session_id}/{alert_rule_id}": { - "get": { + }, + "patch": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Gets an alert rule.", + "description": "Partially updates a gateway policy. Only fields present in\nthe request body are applied; absent fields are left\nunchanged. `policy_type` is immutable — to change a\npolicy's type, delete it and create a new one.\n\n**config** if supplied must match the policy's type:\n- spend-cap: `{\"window\": ..., \"limit_usd\": ...}`\n- guard: `{\"version\": 1, \"detect\": {...}, \"timeout_seconds\": , \"timeout_action\": \"allow\"|\"block\"}`\n- rate-limit: `{\"version\": 1, \"limits\": [{\"metric\": \"requests\"|\"tokens\", \"window\": \"minute\"|\"hour\", \"value\": }]}`\nMismatched shapes are rejected with 400.\n\n**default cascade:** editing a `default_spend_cap` or\n`default_rate_limit` updates the config/action/enabled/priority\non every attached child policy so the template stays the source\nof truth across rollouts.", "tags": [ - "alert_rules" + "gateway-policies" ], - "summary": "Get an alert rule", + "summary": "Update a gateway policy", "parameters": [ { - "description": "Session ID", - "name": "session_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Policy ID", + "name": "id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { "200": { - "description": "Alert rule", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.AlertRuleResponse" + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" } } } }, "400": { - "description": "Bad request", + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "LLM Gateway not enabled, or caller lacks OrganizationManage", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "404": { - "description": "Not found", + "description": "policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "500": { - "description": "Internal server error", + "409": { + "description": "matcher edit collides with another policy in the same family", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "x-public": true - }, - "delete": { + "x-codeSamples": [ + { + "label": "spend_cap", + "lang": "json", + "source": "{\n \"config\": {\"window\": \"monthly\", \"limit_usd\": 200},\n \"enabled\": false\n}" + }, + { + "label": "guard", + "lang": "json", + "source": "{\n \"config\": {\"version\": 1, \"detect\": {\"pii\": true, \"secrets\": true}, \"timeout_seconds\": 5},\n \"enabled\": true\n}" + }, + { + "label": "rate_limit", + "lang": "json", + "source": "{\n \"config\": {\"version\": 1, \"limits\": [{\"metric\": \"requests\", \"window\": \"minute\", \"value\": 100}]},\n \"enabled\": true\n}" + } + ], + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/gateway_policies.UpdateGatewayPolicyRequest" + } + } + } + } + } + }, + "/api/v1/platform/hub/repos/{owner}/{repo}/directories": { + "get": { "security": [ { "API Key": [] @@ -29480,15 +30294,15 @@ "Bearer Auth": [] } ], - "description": "Deletes an alert rule", + "description": "Resolves the flattened file tree for an agent or skill repository at a specific commit, tag, or latest.", "tags": [ - "alert_rules" + "directories" ], - "summary": "Delete an alert rule", + "summary": "Get directory contents", "parameters": [ { - "description": "Session ID", - "name": "session_id", + "description": "Repository owner handle or '-' for current tenant", + "name": "owner", "in": "path", "required": true, "schema": { @@ -29496,87 +30310,96 @@ } }, { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Repository handle", + "name": "repo", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Commit hash/tag to resolve (defaults to latest)", + "name": "commit", + "in": "query", + "schema": { + "type": "string", + "title": "Commit" + } } ], "responses": { "200": { - "description": "Alert rule deleted", + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] - } + "$ref": "#/components/schemas/directories.GetDirectoryResponse" } } } }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "404": { - "description": "Not found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -29584,7 +30407,7 @@ }, "x-public": true }, - "patch": { + "delete": { "security": [ { "API Key": [] @@ -29596,15 +30419,15 @@ "Bearer Auth": [] } ], - "description": "Updates an alert rule.", + "description": "Deletes an agent or skill repository and its owned child file repositories.", "tags": [ - "alert_rules" + "directories" ], - "summary": "Update an alert rule", + "summary": "Delete directory repository", "parameters": [ { - "description": "Session ID", - "name": "session_id", + "description": "Repository owner handle or '-' for current tenant", + "name": "owner", "in": "path", "required": true, "schema": { @@ -29612,8 +30435,8 @@ } }, { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Repository handle", + "name": "repo", "in": "path", "required": true, "schema": { @@ -29622,37 +30445,31 @@ } ], "responses": { - "200": { - "description": "Alert rule updated", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] + "type": "string" } } } } }, - "400": { - "description": "Bad request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -29662,56 +30479,45 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "Not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.UpdateAlertRuleRequest" - } - } - } - } + "x-public": true } }, - "/v1/platform/annotation-queues/{queue_id}/reviewers": { + "/api/v1/platform/hub/repos/{owner}/{repo}/directories/commits": { "post": { "security": [ { @@ -29724,15 +30530,24 @@ "Bearer Auth": [] } ], - "description": "Assigns a single identity as a reviewer for the queue. Idempotent.", + "description": "Creates a new directory commit for an agent or skill repository by applying file/link create, update, and delete operations.", "tags": [ - "annotation_queues" + "directories" ], - "summary": "Add a reviewer to an annotation queue", + "summary": "Create directory commit", "parameters": [ { - "description": "Queue ID", - "name": "queue_id", + "description": "Repository owner handle or '-' for current tenant", + "name": "owner", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Repository handle", + "name": "repo", "in": "path", "required": true, "schema": { @@ -29741,12 +30556,12 @@ } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/annotationqueues.AddReviewerResponse" + "$ref": "#/components/schemas/directories.CommitResponse" } } } @@ -29764,6 +30579,32 @@ } } }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -29777,6 +30618,19 @@ } } }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, "500": { "description": "Internal Server Error", "content": { @@ -29797,15 +30651,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/annotationqueues.AddReviewerRequest" + "$ref": "#/components/schemas/directories.CreateDirectoryCommitRequest" } } } } } }, - "/v1/platform/annotation-queues/{queue_id}/reviewers/{identity_id}": { - "delete": { + "/api/v1/platform/issues": { + "get": { "security": [ { "API Key": [] @@ -29817,57 +30671,152 @@ "Bearer Auth": [] } ], - "description": "Unassigns an identity as a reviewer for the queue. Idempotent.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns issues for the authenticated tenant, optionally filtered\nby session, status, severity, tag, or last modified time.", "tags": [ - "annotation_queues" + "issues" ], - "summary": "Remove a reviewer from an annotation queue", + "summary": "[Beta] List issues", "parameters": [ { - "description": "Queue ID", - "name": "queue_id", - "in": "path", - "required": true, + "description": "Filter by session ID (UUID)", + "name": "session_id", + "in": "query", "schema": { - "type": "string" + "type": "string", + "title": "Session Id" } }, { - "description": "Identity ID of the reviewer to remove", - "name": "identity_id", - "in": "path", - "required": true, + "description": "Filter by session name (exact match)", + "name": "session_name", + "in": "query", "schema": { - "type": "string" + "type": "string", + "title": "Session Name" + } + }, + { + "description": "Filter by status", + "name": "status", + "in": "query", + "schema": { + "enum": [ + "open", + "fixing", + "watching", + "completed", + "ignored" + ], + "type": "string", + "title": "Status" + } + }, + { + "description": "Filter by severity", + "name": "severity", + "in": "query", + "schema": { + "enum": [ + 0, + 1, + 2, + 3 + ], + "type": "integer", + "title": "Severity" + } + }, + { + "description": "Filter by tag (exact match)", + "name": "tag", + "in": "query", + "schema": { + "type": "string", + "title": "Tag" + } + }, + { + "description": "Return only issues updated at or after this RFC3339 timestamp", + "name": "updated_at", + "in": "query", + "schema": { + "type": "string", + "title": "Updated At" + } + }, + { + "description": "Sort field", + "name": "sort_by", + "in": "query", + "schema": { + "enum": [ + "created_at", + "updated_at", + "severity" + ], + "type": "string", + "title": "Sort By" + } + }, + { + "description": "Page size (positive integer; defaults to 50, capped at 500)", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Page offset (non-negative integer)", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tracer_session_issues.Issue" + } + } + } + } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -29877,10 +30826,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -29889,8 +30835,8 @@ "x-public": true } }, - "/v1/platform/datasets/examples/delete": { - "post": { + "/api/v1/platform/issues-agent": { + "get": { "security": [ { "API Key": [] @@ -29902,19 +30848,21 @@ "Bearer Auth": [] } ], - "description": "This endpoint hard deletes *all* versions of a dataset example(s).\nDeletion is performed by setting inputs, outputs, and metadata to null and deleting attachment files while keeping the example ID, dataset ID, and creation timestamp.\nIMPORTANT: attachment files can take up to 7 days to be deleted. inputs, outputs and metadata are nullified immediately.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns every issues agent config configured for the authenticated tenant.", "tags": [ - "examples" + "issues-agent" ], - "summary": "Hard Delete Examples", - "parameters": [], + "summary": "[Beta] List issues agent configs", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ExamplesDeletedResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + } } } } @@ -29924,57 +30872,48 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/examples.DeleteExamplesRequest" - } - } - } - } + "parameters": [] } }, - "/v1/platform/datasets/{dataset_id}/examples": { - "post": { + "/api/v1/platform/issues/{id}": { + "get": { "security": [ { "API Key": [] @@ -29986,30 +30925,29 @@ "Bearer Auth": [] } ], - "description": "This endpoint allows clients to upload examples to a specified dataset by sending a multipart/form-data POST request.\nEach form part contains either JSON-encoded data or binary attachment files associated with an example.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns one issue for the authenticated tenant.", "tags": [ - "examples" + "issues" ], - "summary": "Upload Examples", + "summary": "[Beta] Get issue", "parameters": [ { - "description": "Dataset ID", - "name": "dataset_id", + "description": "Issue ID (UUID)", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ExamplesCreatedResponse" + "$ref": "#/components/schemas/tracer_session_issues.Issue" } } } @@ -30019,7 +30957,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -30029,71 +30977,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "{example_id}": { - "type": "string", - "format": "binary", - "description": "The Example info as JSON. Can have fields 'metadata', 'split', 'use_source_run_io', 'source_run_id', 'created_at', 'modified_at'" - }, - "{example_id}.inputs": { - "type": "string", - "format": "binary", - "description": "The Example inputs as JSON" - }, - "{example_id}.outputs": { - "type": "string", - "format": "binary", - "description": "THe Example outputs as JSON" - }, - "{example_id}.attachments.{name}": { - "type": "string", - "format": "binary", - "description": "File attachment named {name}" - } - }, - "required": [ - "{example_id}", - "{example_id}.inputs" - ] - } - } - } - } - }, - "patch": { + "x-public": true + } + }, + "/api/v1/platform/issues/{id}/fix-verdict": { + "post": { "security": [ { "API Key": [] @@ -30105,30 +31019,29 @@ "Bearer Auth": [] } ], - "description": "This endpoint allows clients to update existing examples in a specified dataset by sending a multipart/form-data PATCH request.\nEach form part contains either JSON-encoded data or binary attachment files to update an example.", + "description": "Records whether a fix resolved the issue when replayed against its preview deployment.", "tags": [ - "examples" + "issues" ], - "summary": "Update Examples", + "summary": "Record a fix-verification verdict", "parameters": [ { - "description": "Dataset ID", - "name": "dataset_id", + "description": "Issue ID", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ExamplesUpdatedResponse" + "$ref": "#/components/schemas/tracer_session_issues.FixVerification" } } } @@ -30138,47 +31051,81 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" - } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.RecordFixVerdictRequest" } } + } + } + } + }, + "/api/v1/platform/issues/{id}/start-preview": { + "post": { + "security": [ + { + "API Key": [] }, - "404": { - "description": "Not Found", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Opens/reuses the fix PR, applies the preview label, and schedules the poll that resumes the fix run when the preview is up.", + "tags": [ + "issues" + ], + "summary": "Start preview-deploy verification for a fix", + "parameters": [ + { + "description": "Issue ID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.StartPreviewResponse" } } } }, - "409": { - "description": "Conflict", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -30188,47 +31135,17 @@ "requestBody": { "required": true, "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "{example_id}": { - "type": "string", - "format": "binary", - "description": "The Example update info as JSON. Can have fields 'metadata', 'split'" - }, - "{example_id}.inputs": { - "type": "string", - "format": "binary", - "description": "The updated Example inputs as JSON" - }, - "{example_id}.outputs": { - "type": "string", - "format": "binary", - "description": "The updated Example outputs as JSON" - }, - "{example_id}.attachments_operations": { - "type": "string", - "format": "binary", - "description": "JSON describing attachment operations (retain, rename)" - }, - "{example_id}.attachment.{name}": { - "type": "string", - "format": "binary", - "description": "New file attachment named {name}" - } - }, - "required": [ - "{example_id}" - ] + "$ref": "#/components/schemas/tracer_session_issues.StartPreviewRequest" } } } } } }, - "/v1/platform/evaluators": { - "get": { + "/api/v1/platform/issues/{id}/views": { + "post": { "security": [ { "API Key": [] @@ -30240,123 +31157,32 @@ "Bearer Auth": [] } ], - "description": "List evaluators for the current workspace, with optional filtering by type, name, tag, feedback key, or resource ID.", + "description": "**Beta:** Records that the current user opened this issue.\nIdempotent. Drives the Engine tab unread-issues badge.", "tags": [ - "evaluators" + "issues" ], - "summary": "List evaluators", + "summary": "[Beta] Mark issue viewed", "parameters": [ { - "description": "Filter by evaluator type", - "name": "type", - "in": "query", - "schema": { - "type": "string", - "title": "Type" - } - }, - { - "description": "Filter by name substring (also searches creator names)", - "name": "name_contains", - "in": "query", - "schema": { - "type": "string", - "title": "Name Contains" - } - }, - { - "description": "Filter by tag value IDs", - "name": "tag_value_id", - "in": "query", - "style": "form", - "explode": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Tag Value Id" - } - }, - { - "description": "Filter by feedback key", - "name": "feedback_key", - "in": "query", - "schema": { - "type": "string", - "title": "Feedback Key" - } - }, - { - "description": "Filter by resource IDs", - "name": "resource_id", - "in": "query", - "style": "form", - "explode": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Resource Id" - } - }, - { - "description": "Field to sort by", - "name": "sort_by", - "in": "query", - "schema": { - "type": "string", - "title": "Sort By" - } - }, - { - "description": "Sort in descending order", - "name": "sort_by_desc", - "in": "query", - "schema": { - "type": "boolean", - "title": "Sort By Desc" - } - }, - { - "description": "Maximum number of results (1-100)", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "default": 100, - "title": "Limit" - } - }, - { - "description": "Offset for pagination", - "name": "offset", - "in": "query", + "description": "Issue ID (UUID)", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "integer", - "default": 0, - "title": "Offset" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ListEvaluatorsResponse" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -30366,7 +31192,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -30376,7 +31202,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -30386,15 +31222,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } } }, "x-public": true - }, - "post": { + } + }, + "/api/v1/platform/mcp-vendors": { + "get": { "security": [ { "API Key": [] @@ -30406,29 +31244,18 @@ "Bearer Auth": [] } ], - "description": "Create a new LLM or code evaluator for the current workspace.", + "description": "Returns the catalog of available MCP vendors.", "tags": [ - "evaluators" + "mcp_vendors" ], - "summary": "Create evaluator", - "parameters": [], + "summary": "List MCP vendors", "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.CreateEvaluatorResponse" - } - } - } - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ListMcpVendorsResponse" } } } @@ -30438,7 +31265,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30448,35 +31275,18 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.CreateEvaluatorRequest" - } - } - } - } - }, - "delete": { + "parameters": [] + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}": { + "get": { "security": [ { "API Key": [] @@ -30488,34 +31298,19 @@ "Bearer Auth": [] } ], - "description": "Delete multiple evaluators by their IDs. Returns per-item success/failure.", + "description": "Returns vendor metadata and current settings.", "tags": [ - "evaluators" + "mcp_vendors" ], - "summary": "Bulk delete evaluators", + "summary": "Get MCP vendor", "parameters": [ { - "description": "Evaluator IDs to delete", - "name": "evaluator_ids", - "in": "query", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", "required": true, - "style": "form", - "explode": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Evaluator Ids" - } - }, - { - "description": "When true, delete all run rules for this evaluator before deleting the evaluator", - "name": "delete_run_rules", - "in": "query", "schema": { - "type": "boolean", - "title": "Delete Run Rules" + "type": "string" } } ], @@ -30525,17 +31320,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.BulkDeleteEvaluatorsResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.GetMcpVendorResponse" } } } @@ -30545,7 +31330,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30555,17 +31340,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30574,7 +31359,7 @@ "x-public": true } }, - "/v1/platform/evaluators/spend": { + "/api/v1/platform/mcp-vendors/{vendor_slug}/account": { "get": { "security": [ { @@ -30587,88 +31372,19 @@ "Bearer Auth": [] } ], - "description": "Returns per-day LLM evaluator spend for the requested 7-day period, grouped by evaluator, resource, or run rule. Exactly one of group_by, evaluator_id, session_id, or dataset_id is required. resource_id, type, and feedback_key may be supplied with group_by to narrow listing aggregations.", + "description": "Resolves OAuth token and returns the vendor's account info.", "tags": [ - "evaluators" + "mcp_vendors" ], - "summary": "Get evaluator spend", + "summary": "Get vendor account", "parameters": [ { - "description": "Aggregation mode: 'evaluator', 'resource', or 'run_rule'. Mutually exclusive with entity filters.", - "name": "group_by", - "in": "query", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Group By" - } - }, - { - "description": "Filter to a specific evaluator (UUID). Mutually exclusive with group_by.", - "name": "evaluator_id", - "in": "query", - "schema": { - "type": "string", - "title": "Evaluator Id" - } - }, - { - "description": "Filter to a specific project (UUID). Mutually exclusive with group_by.", - "name": "session_id", - "in": "query", - "schema": { - "type": "string", - "title": "Session Id" - } - }, - { - "description": "Filter to a specific dataset (UUID). Mutually exclusive with group_by.", - "name": "dataset_id", - "in": "query", - "schema": { - "type": "string", - "title": "Dataset Id" - } - }, - { - "description": "Filter grouped results to evaluators attached to all supplied project or dataset IDs. Only valid with group_by.", - "name": "resource_id", - "in": "query", - "style": "form", - "explode": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Resource Id" - } - }, - { - "description": "Filter grouped results by evaluator type: 'llm' or 'code'. Only valid with group_by.", - "name": "type", - "in": "query", - "schema": { - "type": "string", - "title": "Type" - } - }, - { - "description": "Filter grouped results by evaluator feedback key. Only valid with group_by.", - "name": "feedback_key", - "in": "query", - "schema": { - "type": "string", - "title": "Feedback Key" - } - }, - { - "description": "Start of the 7-day window (YYYY-MM-DD).", - "name": "period_start", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Period Start" + "type": "string" } } ], @@ -30678,7 +31394,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.GetEvaluatorSpendResponse" + "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountResponseList" } } } @@ -30688,7 +31404,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30698,7 +31414,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30708,7 +31424,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30718,17 +31434,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "502": { + "description": "Bad Gateway", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30737,7 +31453,7 @@ "x-public": true } }, - "/v1/platform/evaluators/{evaluator_id}": { + "/api/v1/platform/mcp-vendors/{vendor_slug}/mcp-servers": { "get": { "security": [ { @@ -30750,20 +31466,38 @@ "Bearer Auth": [] } ], - "description": "Retrieve a single evaluator by its ID.", + "description": "Returns the MCP gateways from the vendor for the workspace's configured org/project.", "tags": [ - "evaluators" + "mcp_vendors" ], - "summary": "Get evaluator", + "summary": "List MCP servers for a vendor", "parameters": [ { - "description": "Evaluator ID", - "name": "evaluator_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Max items to return (default 100)", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Number of items to skip (default 0)", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" + } } ], "responses": { @@ -30772,7 +31506,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.Evaluator" + "$ref": "#/components/schemas/mcp_vendors.ListMcpGatewaysResponse" } } } @@ -30782,7 +31516,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30792,7 +31526,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30802,7 +31536,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30812,25 +31546,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "502": { + "description": "Bad Gateway", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, "x-public": true - }, - "delete": { + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/settings": { + "get": { "security": [ { "API Key": [] @@ -30842,41 +31578,29 @@ "Bearer Auth": [] } ], - "description": "Delete an evaluator. When delete_run_rules is true, all run rules referencing this evaluator are deleted first (same tenant). Associated llm_evaluators and code_evaluators rows are removed by foreign-key cascade when the evaluator row is deleted.", + "description": "Returns the current vendor-specific settings.", "tags": [ - "evaluators" + "mcp_vendors" ], - "summary": "Delete evaluator", + "summary": "Get vendor settings", "parameters": [ { - "description": "Evaluator ID", - "name": "evaluator_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "When true, delete all run rules for this evaluator before deleting the evaluator", - "name": "delete_run_rules", - "in": "query", - "schema": { - "type": "boolean", - "title": "Delete Run Rules" - } } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" } } } @@ -30886,7 +31610,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30896,7 +31620,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30906,27 +31630,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30934,7 +31638,7 @@ }, "x-public": true }, - "patch": { + "put": { "security": [ { "API Key": [] @@ -30946,15 +31650,15 @@ "Bearer Auth": [] } ], - "description": "Update an existing evaluator's name, LLM configuration, or code configuration.", + "description": "Replaces vendor settings.", "tags": [ - "evaluators" + "mcp_vendors" ], - "summary": "Update evaluator", + "summary": "Replace vendor settings", "parameters": [ { - "description": "Evaluator ID", - "name": "evaluator_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { @@ -30968,7 +31672,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.UpdateEvaluatorResponse" + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" } } } @@ -30978,7 +31682,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30988,7 +31692,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30998,7 +31702,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -31008,17 +31712,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -31030,15 +31724,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.UpdateEvaluatorRequest" + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" } } } } - } - }, - "/v1/platform/features": { - "get": { + }, + "post": { "security": [ { "API Key": [] @@ -31050,21 +31742,39 @@ "Bearer Auth": [] } ], - "description": "Returns a consolidated view of default models and disabled models per feature for the workspace.", + "description": "Initializes vendor settings.", "tags": [ - "features" + "mcp_vendors" + ], + "summary": "Create vendor settings", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "List feature configurations", "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/features.FeatureConfig" - } + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -31074,7 +31784,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -31084,28 +31794,45 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, "x-public": true, - "parameters": [] - } - }, - "/v1/platform/features/{feature}/default-model": { - "put": { + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + } + } + } + } + }, + "delete": { "security": [ { "API Key": [] @@ -31117,15 +31844,15 @@ "Bearer Auth": [] } ], - "description": "Sets or replaces the default model for a feature in the workspace.", + "description": "Removes vendor settings.", "tags": [ - "features" + "mcp_vendors" ], - "summary": "Set default model for a feature", + "summary": "Delete vendor settings", "parameters": [ { - "description": "Feature name", - "name": "feature", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { @@ -31134,15 +31861,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" } } } @@ -31152,7 +31876,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -31162,35 +31886,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.UpsertDefaultModelRequest" - } - } - } - } - }, - "delete": { + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/tools": { + "get": { "security": [ { "API Key": [] @@ -31202,32 +31918,57 @@ "Bearer Auth": [] } ], - "description": "Removes the default model for a feature in the workspace.", + "description": "Returns the tool catalog for this vendor.", "tags": [ - "features" + "mcp_vendors" ], - "summary": "Delete default model for a feature", + "summary": "List tools for a vendor", "parameters": [ { - "description": "Feature name", - "name": "feature", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Max tools to return (default 50)", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Number of tools to skip (default 0)", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ListVendorToolsResponse" + } + } + } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -31237,17 +31978,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -31256,8 +31997,8 @@ "x-public": true } }, - "/v1/platform/features/{feature}/disabled-models": { - "put": { + "/api/v1/platform/oauth/authorized-apps": { + "get": { "security": [ { "API Key": [] @@ -31269,32 +32010,21 @@ "Bearer Auth": [] } ], - "description": "Adds a model to the disabled list for a feature in the workspace.", + "description": "Lists the third-party applications the authenticated user has authorized to sign in with LangSmith.", "tags": [ - "features" - ], - "summary": "Disable a model for a feature", - "parameters": [ - { - "description": "Feature name", - "name": "feature", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "oauth" ], + "summary": "List authorized applications", "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth.AuthorizedAppView" + } } } } @@ -31304,46 +32034,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.DisableModelRequest" - } - } - } - } + "parameters": [] } }, - "/v1/platform/features/{feature}/disabled-models/{model}": { + "/api/v1/platform/oauth/authorized-apps/{clientID}": { "delete": { "security": [ { @@ -31356,24 +32057,15 @@ "Bearer Auth": [] } ], - "description": "Removes a model from the disabled list for a feature in the workspace.", + "description": "Revokes the authenticated user's authorization for an application and invalidates that application's active tokens for the user.", "tags": [ - "features" + "oauth" ], - "summary": "Re-enable a disabled model for a feature", + "summary": "Revoke an authorized application", "parameters": [ { - "description": "Feature name", - "name": "feature", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Model name (URL-encoded)", - "name": "model", + "description": "OAuth client ID", + "name": "clientID", "in": "path", "required": true, "schema": { @@ -31385,42 +32077,22 @@ "204": { "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" - } - } - } - }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } @@ -31429,230 +32101,306 @@ "x-public": true } }, - "/v1/platform/gateway-policies": { + "/api/v1/platform/oauth/clients": { "get": { "security": [ { "API Key": [] }, + { + "Tenant ID": [] + }, { "Bearer Auth": [] } ], - "description": "Returns every gateway policy in the current organization.\nThe response includes both admin-created policies and\nruntime-materialized children of `default_spend_cap`\npolicies (children carry `parent_policy_id`).\n\n**Spend tracking:** each spend-cap policy carries\n`current_spend_usd` — the spend accumulated in the policy's\nactive window.\n\n**Filters** (all optional):\n- `policy_type` — `spend_cap`, `default_spend_cap`, `guard`, or `route_config`\n- `subject_matcher_key` + `subject_matcher_value` — narrow to\npolicies whose subject_matchers contain `{key, value}`\n\nFor batch lookups by a set of subject values (e.g. many\nrun_rule_ids at once), use POST\n`/v1/platform/gateway-policies/search`; it accepts the\nvalues in a JSON body and avoids the URL-length ceiling\nthat a repeated query param would hit at scale.", + "description": "Lists the OAuth clients owned by the caller's organization.", "tags": [ - "gateway-policies" - ], - "summary": "List gateway policies", - "parameters": [ - { - "description": "Filter by policy_type", - "name": "policy_type", - "in": "query", - "schema": { - "type": "string", - "title": "Policy Type" - } - }, - { - "description": "Filter by subject matcher key", - "name": "subject_matcher_key", - "in": "query", - "schema": { - "type": "string", - "title": "Subject Matcher Key" - } - }, - { - "description": "Filter by subject matcher value (paired with subject_matcher_key)", - "name": "subject_matcher_value", - "in": "query", - "schema": { - "type": "string", - "title": "Subject Matcher Value" - } - } + "oauth" ], + "summary": "List OAuth clients", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" - } + "$ref": "#/components/schemas/oauth.OAuthClientListResponse" } } } + } + }, + "x-public": true, + "parameters": [] + }, + "post": { + "security": [ + { + "API Key": [] }, - "401": { - "description": "Unauthorized", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Registers a new OAuth 2.0 / OIDC client owned by the caller's organization. For confidential clients the response includes a client_secret that is shown only once.", + "tags": [ + "oauth" + ], + "summary": "Create an OAuth client", + "parameters": [], + "responses": { + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/oauth.OAuthClientCredentialsResponse" } } } }, - "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } }, - "500": { - "description": "Internal Server Error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "x-public": true - }, - "post": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.CreateOAuthClientRequest" + } + } + } + } + } + }, + "/api/v1/platform/oauth/clients/{id}": { + "get": { "security": [ { "API Key": [] }, + { + "Tenant ID": [] + }, { "Bearer Auth": [] } ], - "description": "Creates a gateway policy for the calling organization.\n\n**policy_type** is one of `spend_cap`, `default_spend_cap`,\n`guard`, or `route_config`. The shape of `config` depends on policy_type:\n- `spend_cap` / `default_spend_cap`:\n`{\"window\": \"hourly\"|\"daily\"|\"weekly\"|\"monthly\", \"limit_usd\": }`\n- `guard`:\n`{\"version\": 1, \"detect\": {\"pii\": , \"secrets\": }, \"timeout_seconds\": , \"timeout_action\": \"allow\"|\"block\"}`\n`timeout_seconds` (optional, 0.1–30) caps guard pipeline execution time; defaults to 2s. `timeout_action` defaults to `allow`.\n- `route_config`:\n`{\"strategy\": \"priority_fallback\", \"triggers\": {\"status_codes\": []}, \"fallbacks\": [{\"model_configs\": [{\"model_config_id\": \"\"}]}]}`\n`triggers` is required, with no default: `status_codes` must be a non-empty list (include 502 and 504 for upstream transport failures). `fallbacks` contains an entry whose `model_configs` are tried in priority order (1–5). `subject_matchers` must be a single `workspace_id` entry.\n\n**subject_matchers** is a list of `{key, value}` pairs.\n`key` is one of `organization_id`, `workspace_id`, `user_id`,\n`api_key_id`, or `run_rule_id`. Multiple matchers AND together. A\n`default_spend_cap` uses `{key, value: \"\"}` so the runtime\nmaterializes a per-subject child for every distinct subject\nof that kind it sees in request metadata.\n\n**action** is currently always `block`. Spend caps reject the\nrequest with 402 when the limit is hit; guard policies redact\nmatched content in-place before forwarding upstream.\n\n**Upsert by matchers:** for `spend_cap`, `default_spend_cap`, and\n`guard`, if a policy with the same `subject_matchers` already exists\nin this organization, the existing policy is updated in place instead\nof a duplicate being created. `id` is preserved. `route_config` does\nnot upsert by matchers — name must be unique per organization (409 on\nconflict). Returns 201 either way.", "tags": [ - "gateway-policies" + "oauth" + ], + "summary": "Get an OAuth client", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Create a gateway policy", - "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + "$ref": "#/components/schemas/oauth.OAuthClientView" } } } }, - "400": { - "description": "validation failure (bad matchers, unknown policy_type, missing required field)", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } + } + }, + "x-public": true + }, + "delete": { + "security": [ + { + "API Key": [] }, - "401": { - "description": "missing or invalid auth", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "tags": [ + "oauth" + ], + "summary": "Delete an OAuth client", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } + } + }, + "x-public": true + }, + "patch": { + "security": [ + { + "API Key": [] }, - "403": { - "description": "LLM Gateway not enabled for the organization, or caller lacks OrganizationManage", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "tags": [ + "oauth" + ], + "summary": "Update an OAuth client", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/oauth.OAuthClientView" } } } }, - "409": { - "description": "policy name conflict", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "x-codeSamples": [ - { - "label": "spend_cap", - "lang": "json", - "source": "{\n \"name\": \"monthly-cap\",\n \"policy_type\": \"spend_cap\",\n \"action\": \"block\",\n \"subject_matchers\": [{\"key\":\"organization_id\",\"value\":\"\"}],\n \"config\": {\"window\": \"monthly\", \"limit_usd\": 100}\n}" - }, - { - "label": "guard", - "lang": "json", - "source": "{\n \"name\": \"redact-pii\",\n \"policy_type\": \"guard\",\n \"action\": \"block\",\n \"subject_matchers\": [{\"key\":\"organization_id\",\"value\":\"\"}],\n \"config\": {\"version\": 1, \"detect\": {\"pii\": true, \"secrets\": true}, \"timeout_seconds\": 3}\n}" - }, - { - "label": "route_config", - "lang": "json", - "source": "{\n \"name\": \"gpt-fallback\",\n \"policy_type\": \"route_config\",\n \"action\": \"block\",\n \"subject_matchers\": [{\"key\": \"workspace_id\", \"value\": \"\"}],\n \"config\": {\"strategy\": \"priority_fallback\", \"triggers\": {\"status_codes\": [429, 500, 502, 503, 504]}, \"fallbacks\": [{\"model_configs\": [{\"model_config_id\": \"11111111-1111-1111-1111-111111111111\"}]}]}\n}" - } - ], "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.CreateGatewayPolicyRequest" + "$ref": "#/components/schemas/oauth.UpdateOAuthClientRequest" } } } } } }, - "/v1/platform/gateway-policies/search": { + "/api/v1/platform/oauth/clients/{id}/rotate-secret": { "post": { "security": [ { "API Key": [] }, + { + "Tenant ID": [] + }, { "Bearer Auth": [] } ], - "description": "Batch variant of GET /v1/platform/gateway-policies for\nfetching policies that match a set of subject_matcher_values\nunder one subject_matcher_key. Accepts the values in a JSON\nbody so callers can include hundreds of subject ids without\nbumping into per-server URL-length limits.\n\nVisibility, response shape, and matcher semantics are\nidentical to the GET list. With `subject_matcher_values`\nempty (or omitted) this returns the same result as GET\nwith only `policy_type` set.", + "description": "Generates a new client secret for a confidential client, invalidating the previous one. The new secret is shown only once.", "tags": [ - "gateway-policies" + "oauth" + ], + "summary": "Rotate an OAuth client secret", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Search gateway policies by subject value set", - "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" - } + "$ref": "#/components/schemas/oauth.OAuthClientCredentialsResponse" } } } @@ -31662,488 +32410,419 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.SearchGatewayPoliciesRequest" - } - } - } - } + "x-public": true } }, - "/v1/platform/gateway-policies/{id}": { - "get": { + "/api/v1/platform/ops/backfills/restart": { + "post": { "security": [ { "API Key": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } ], - "description": "Returns a single gateway policy by id. Cross-org access is\nrejected with 404\n\n**Spend tracking:** spend-cap policies include\n`current_spend_usd` for the active window so callers can\nread per-policy cost without hitting a separate endpoint.\nGuard policies leave it null.", + "description": "Deletes the backfill job record, causing the backfill to restart from the beginning on the next cron tick. Requires instance admin access.", "tags": [ - "gateway-policies" - ], - "summary": "Get a gateway policy", - "parameters": [ - { - "description": "Policy ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "backfills" ], + "summary": "Restart a backfill job", + "parameters": [], "responses": { "200": { - "description": "OK", + "description": "Backfill restarted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "policy not found", + "description": "Backfill not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-public": true - }, - "delete": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/backfills.restartBackfillRequest" + } + } + } + } + } + }, + "/api/v1/platform/orgs/current/access-policies": { + "get": { "security": [ { "API Key": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } ], - "description": "Deletes a gateway policy. Subsequent reads return 404.\n\n**default_spend_cap cascade:** deleting a `default_spend_cap`\nalso deletes every child policy materialized from it.", + "description": "Lists all access policies for the organization.", "tags": [ - "gateway-policies" - ], - "summary": "Delete a gateway policy", - "parameters": [ - { - "description": "Policy ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "access_policies" ], + "summary": "List access policies", "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "List of access policies", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/authz_internal.ListAccessPoliciesResponse" } } } }, "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationManage", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "policy not found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true + "x-public": true, + "parameters": [] }, - "patch": { + "post": { "security": [ { "API Key": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } ], - "description": "Partially updates a gateway policy. Only fields present in\nthe request body are applied; absent fields are left\nunchanged. `policy_type` is immutable — to change a\npolicy's type, delete it and create a new one.\n\n**config** if supplied must match the policy's type:\n- spend-cap: `{\"window\": ..., \"limit_usd\": ...}`\n- guard: `{\"version\": 1, \"detect\": {...}, \"timeout_seconds\": , \"timeout_action\": \"allow\"|\"block\"}`\nMismatched shapes are rejected with 400.\n\n**default_spend_cap cascade:** editing a `default_spend_cap`\nupdates the config/action/enabled/priority on every\nattached child policy so the template stays the source of\ntruth across rollouts.", + "description": "Creates a new access policy.", "tags": [ - "gateway-policies" - ], - "summary": "Update a gateway policy", - "parameters": [ - { - "description": "Policy ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } + "access_policies" ], + "summary": "Create an access policy", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Access policy created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + "$ref": "#/components/schemas/authz_internal.AccessPolicyCreateResponse" } } } }, "400": { - "description": "validation failure", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationManage", + "404": { + "description": "Role or access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "policy not found", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "matcher edit collides with another policy in the same family", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-codeSamples": [ - { - "label": "spend_cap", - "lang": "json", - "source": "{\n \"config\": {\"window\": \"monthly\", \"limit_usd\": 200},\n \"enabled\": false\n}" - }, - { - "label": "guard", - "lang": "json", - "source": "{\n \"config\": {\"version\": 1, \"detect\": {\"pii\": true, \"secrets\": true}, \"timeout_seconds\": 5},\n \"enabled\": true\n}" - } - ], "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.UpdateGatewayPolicyRequest" + "$ref": "#/components/schemas/authz_internal.CreateAccessPolicyPayload" } } } } } }, - "/v1/platform/hub/repos/{owner}/{repo}/directories": { - "get": { + "/api/v1/platform/orgs/current/access-policies/roles/{role_id}/access-policies": { + "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Resolves the flattened file tree for an agent or skill repository at a specific commit, tag, or latest.", + "description": "Attaches one or more access policies to a specific role. The request body must contain an array of access policy IDs.", "tags": [ - "directories" + "access_policies" ], - "summary": "Get directory contents", + "summary": "Attach access policies to a role", "parameters": [ { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Repository handle", - "name": "repo", + "description": "Role ID", + "name": "role_id", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "Commit hash/tag to resolve (defaults to latest)", - "name": "commit", - "in": "query", - "schema": { - "type": "string", - "title": "Commit" - } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "Access policies attached successfully" + }, + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/directories.GetDirectoryResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Role or access policy not found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true - }, - "delete": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" + } + } + } + } + } + }, + "/api/v1/platform/orgs/current/access-policies/{access_policy_id}": { + "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Deletes an agent or skill repository and its owned child file repositories.", + "description": "Gets a specific access policy by ID.", "tags": [ - "directories" + "access_policies" ], - "summary": "Delete directory repository", + "summary": "Get an access policy", "parameters": [ { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Repository handle", - "name": "repo", + "description": "Access Policy ID", + "name": "access_policy_id", "in": "path", "required": true, "schema": { @@ -32152,31 +32831,22 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "Access policy details", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/authz_internal.AccessPolicy" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -32186,75 +32856,140 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "Access policy not found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, "x-public": true - } - }, - "/v1/platform/hub/repos/{owner}/{repo}/directories/commits": { - "post": { + }, + "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Creates a new directory commit for an agent or skill repository by applying file/link create, update, and delete operations.", + "description": "Deletes a specific access policy by ID.", "tags": [ - "directories" + "access_policies" ], - "summary": "Create directory commit", + "summary": "Delete an access policy", "parameters": [ { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", + "description": "Access Policy ID", + "name": "access_policy_id", "in": "path", "required": true, "schema": { "type": "string" } + } + ], + "responses": { + "204": { + "description": "Access policy deleted successfully" + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true + }, + "patch": { + "security": [ { - "description": "Repository handle", - "name": "repo", + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Updates one or more fields on an access policy.", + "tags": [ + "access_policies" + ], + "summary": "Update an access policy", + "parameters": [ + { + "description": "Access Policy ID", + "name": "access_policy_id", "in": "path", "required": true, "schema": { @@ -32264,56 +32999,120 @@ ], "responses": { "200": { - "description": "OK", + "description": "Updated access policy", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/directories.CommitResponse" + "$ref": "#/components/schemas/authz_internal.AccessPolicy" } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Access policy not found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Semantic validation failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.UpdateAccessPolicyPayload" + } + } + } + } + } + }, + "/api/v1/platform/orgs/current/info": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Returns organization info for the authenticated user's current organization.", + "tags": [ + "Organizations" + ], + "summary": "Get current organization info", + "responses": { + "200": { + "description": "Organization info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/orgs.OrganizationInfo" + } + } + } + }, + "400": { + "description": "Invalid organization ID", "content": { "application/json": { "schema": { @@ -32325,8 +33124,8 @@ } } }, - "409": { - "description": "Conflict", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -32339,7 +33138,7 @@ } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { @@ -32353,155 +33152,178 @@ } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/directories.CreateDirectoryCommitRequest" - } - } - } - } + "parameters": [] } }, - "/v1/platform/issues": { + "/api/v1/platform/orgs/current/members": { "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns issues for the authenticated tenant, optionally filtered\nby session, status, severity, tag, or last modified time.", + "description": "Returns a paginated list of org members (active and pending) enriched with workspace memberships.", "tags": [ - "issues" + "orgs" ], - "summary": "[Beta] List issues", + "summary": "List org members with workspace roles", "parameters": [ { - "description": "Filter by session ID (UUID)", - "name": "session_id", + "description": "Page size (default 50, max 500)", + "name": "limit", "in": "query", "schema": { - "type": "string", - "title": "Session Id" + "type": "integer", + "title": "Limit" } }, { - "description": "Filter by session name (exact match)", - "name": "session_name", + "description": "Page offset (default 0)", + "name": "offset", "in": "query", "schema": { - "type": "string", - "title": "Session Name" + "type": "integer", + "title": "Offset" } }, { - "description": "Filter by status", - "name": "status", + "description": "Filter: true = only active members; false = only pending members", + "name": "active_is", "in": "query", "schema": { - "type": "string", - "enum": [ - "open", - "completed", - "ignored" - ], - "title": "Status" + "type": "boolean", + "title": "Active Is" } }, { - "description": "Filter by severity", - "name": "severity", + "description": "Filter: true = only pending members; false = only active members", + "name": "pending_is", "in": "query", "schema": { - "type": "integer", - "enum": [ - 0, - 1, - 2, - 3 - ], - "title": "Severity" + "type": "boolean", + "title": "Pending Is" } }, { - "description": "Filter by tag (exact match)", - "name": "tag", + "description": "Glob filter on display name; use * as wildcard (repeatable, matches any)", + "name": "name_like", "in": "query", + "style": "form", + "explode": true, "schema": { - "type": "string", - "title": "Tag" + "type": "array", + "items": { + "type": "string" + }, + "title": "Name Like" } }, { - "description": "Return only issues updated at or after this RFC3339 timestamp", - "name": "updated_at", + "description": "Glob filter on email; use * as wildcard (repeatable, matches any)", + "name": "email_like", "in": "query", + "style": "form", + "explode": true, "schema": { - "type": "string", - "title": "Updated At" + "type": "array", + "items": { + "type": "string" + }, + "title": "Email Like" } }, { - "description": "Sort field", - "name": "sort_by", + "description": "Glob filter on workspace name or ID; use * as wildcard (repeatable, matches any)", + "name": "workspace_name_like", "in": "query", + "style": "form", + "explode": true, "schema": { - "type": "string", - "enum": [ - "created_at", - "updated_at", - "severity" - ], - "title": "Sort By" + "type": "array", + "items": { + "type": "string" + }, + "title": "Workspace Name Like" } }, { - "description": "Page size (positive integer; defaults to 50, capped at 500)", - "name": "limit", + "description": "Glob filter on organization role name; use * as wildcard (repeatable, matches any)", + "name": "organization_role_like", "in": "query", + "style": "form", + "explode": true, "schema": { - "type": "integer", - "title": "Limit" + "type": "array", + "items": { + "type": "string" + }, + "title": "Organization Role Like" } }, { - "description": "Page offset (non-negative integer)", - "name": "offset", + "description": "Glob filter on workspace role name; use * as wildcard (repeatable, matches any)", + "name": "workspace_role_like", "in": "query", + "style": "form", + "explode": true, "schema": { - "type": "integer", - "title": "Offset" + "type": "array", + "items": { + "type": "string" + }, + "title": "Workspace Role Like" } } ], "responses": { "200": { - "description": "OK", + "description": "Org members", + "headers": { + "X-Members-Anonymity-Restricted": { + "description": "Set to 'true' when the response was restricted by the organization's anonymity setting.", + "schema": { + "type": "string" + } + }, + "X-Members-List-All-Workspaces": { + "description": "true if caller has organization:manage", + "schema": { + "type": "string" + } + }, + "X-Pagination-Total": { + "description": "Total number of matching members", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/tracer_session_issues.Issue" + "$ref": "#/components/schemas/orgs.OrgMemberEnriched" } } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -32511,27 +33333,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -32540,169 +33358,215 @@ "x-public": true } }, - "/v1/platform/issues-agent": { - "get": { + "/api/v1/platform/orgs/current/roles/{role_id}/access-policies": { + "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns every issues agent config configured for the authenticated tenant.", + "description": "Attaches one or more access policies to a specific role. The request body must contain an array of access policy IDs.", "tags": [ - "issues-agent" + "access_policies" ], - "summary": "[Beta] List issues agent configs", - "responses": { - "200": { - "description": "OK", + "summary": "Attach access policies to a role", + "parameters": [ + { + "description": "Role ID", + "name": "role_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Access policies attached successfully" + }, + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Role or access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, "x-public": true, - "parameters": [] - } - }, - "/v1/platform/issues/{id}": { - "get": { + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" + } + } + } + } + }, + "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns one issue for the authenticated tenant.", + "description": "Detaches one or more access policies from a specific role.", "tags": [ - "issues" + "access_policies" ], - "summary": "[Beta] Get issue", + "summary": "Detach access policies from a role", "parameters": [ { - "description": "Issue ID (UUID)", - "name": "id", + "description": "Role ID", + "name": "role_id", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Access policy IDs to detach", + "name": "access_policy_ids", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Access Policy Ids" + } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "Access policies detached successfully" + }, + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.Issue" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Role not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -32711,126 +33575,147 @@ "x-public": true } }, - "/v1/platform/issues/{id}/fix-verdict": { - "post": { + "/api/v1/platform/orgs/current/scim/tokens": { + "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Records whether a fix resolved the issue when replayed against its preview deployment.", + "description": "List all SCIM bearer tokens for the current organization. The full token values are not returned.", "tags": [ - "issues" - ], - "summary": "Record a fix-verification verdict", - "parameters": [ - { - "description": "Issue ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "SCIM Tokens" ], + "summary": "List SCIM tokens", "responses": { "200": { - "description": "OK", + "description": "List of SCIM tokens", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.FixVerification" + "type": "array", + "items": { + "$ref": "#/components/schemas/scim.ScimTokenResponse" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues.RecordFixVerdictRequest" + }, + "403": { + "description": "Forbidden - requires OrganizationRead permission", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } } } } - } - } - }, - "/v1/platform/issues/{id}/start-preview": { + }, + "x-public": true, + "parameters": [] + }, "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Opens/reuses the fix PR, applies the preview label, and schedules the poll that resumes the fix run when the preview is up.", + "description": "Create a new SCIM bearer token for the current organization. The full token value is only returned once upon creation.", "tags": [ - "issues" - ], - "summary": "Start preview-deploy verification for a fix", - "parameters": [ - { - "description": "Issue ID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "SCIM Tokens" ], + "summary": "Create a SCIM token", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created SCIM token with full token value", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.StartPreviewResponse" + "$ref": "#/components/schemas/scim.ScimTokenSensitiveResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" } } } @@ -32842,35 +33727,35 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.StartPreviewRequest" + "$ref": "#/components/schemas/scim.CreateScimTokenPayload" } } } } } }, - "/v1/platform/issues/{id}/views": { - "post": { + "/api/v1/platform/orgs/current/scim/tokens/{scim_token_id}": { + "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "**Beta:** Records that the current user opened this issue.\nIdempotent. Drives the Engine tab unread-issues badge.", + "description": "Retrieve a specific SCIM token by ID for the current organization. The full token value is not returned.", "tags": [ - "issues" + "SCIM Tokens" ], - "summary": "[Beta] Mark issue viewed", + "summary": "Get a SCIM token", "parameters": [ { - "description": "Issue ID (UUID)", - "name": "id", + "description": "SCIM Token ID", + "name": "scim_token_id", "in": "path", "required": true, "schema": { @@ -32879,15 +33764,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "SCIM token details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/scim.ScimTokenResponse" } } } @@ -32897,121 +33779,75 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationRead permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "404": { - "description": "Not Found", + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" - } - } - } - } - }, - "x-public": true - } - }, - "/v1/platform/mcp-vendors": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Returns the catalog of available MCP vendors.", - "tags": [ - "mcp_vendors" - ], - "summary": "List MCP vendors", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListMcpVendorsResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, - "x-public": true, - "parameters": [] - } - }, - "/v1/platform/mcp-vendors/{vendor_slug}": { - "get": { + "x-public": true + }, + "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns vendor metadata and current settings.", + "description": "Delete a SCIM bearer token from the current organization.", "tags": [ - "mcp_vendors" + "SCIM Tokens" ], - "summary": "Get MCP vendor", + "summary": "Delete a SCIM token", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "SCIM Token ID", + "name": "scim_token_id", "in": "path", "required": true, "schema": { @@ -33020,72 +33856,83 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No content - token deleted successfully" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.GetMcpVendorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden - requires OrganizationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/mcp-vendors/{vendor_slug}/account": { - "get": { + }, + "patch": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Resolves OAuth token and returns the vendor's account info.", + "description": "Update the description of an existing SCIM token for the current organization.", "tags": [ - "mcp_vendors" + "SCIM Tokens" ], - "summary": "Get vendor account", + "summary": "Update a SCIM token", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "SCIM Token ID", + "name": "scim_token_id", "in": "path", "required": true, "schema": { @@ -33095,70 +33942,80 @@ ], "responses": { "200": { - "description": "OK", + "description": "Updated SCIM token details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountResponseList" + "$ref": "#/components/schemas/scim.ScimTokenResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden - requires OrganizationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.UpdateScimTokenPayload" + } + } + } + } } }, - "/v1/platform/mcp-vendors/{vendor_slug}/mcp-servers": { + "/api/v1/platform/sessions/{sessionID}/agent-versions": { "get": { "security": [ { @@ -33171,57 +34028,45 @@ "Bearer Auth": [] } ], - "description": "Returns the MCP gateways from the vendor for the workspace's configured org/project.", + "description": "Returns all agent versions (commit SHAs) seen in the given tracing project, ordered by first_seen_at descending.", "tags": [ - "mcp_vendors" + "sessions" ], - "summary": "List MCP servers for a vendor", + "summary": "List agent versions for a project", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Tracing project (session) UUID", + "name": "sessionID", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "Max items to return (default 100)", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Number of items to skip (default 0)", - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "title": "Offset" - } } ], "responses": { "200": { - "description": "OK", + "description": "Agent versions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListMcpGatewaysResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/tracer_sessions.AgentVersionResponse" + } } } } }, "400": { - "description": "Bad Request", + "description": "Invalid session ID", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -33231,37 +34076,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -33270,7 +34088,7 @@ "x-public": true } }, - "/v1/platform/mcp-vendors/{vendor_slug}/settings": { + "/api/v1/platform/sessions/{session_id}/issues-agent": { "get": { "security": [ { @@ -33283,15 +34101,15 @@ "Bearer Auth": [] } ], - "description": "Returns the current vendor-specific settings.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns the issues agent config attached to the given tracer session.", "tags": [ - "mcp_vendors" + "issues-agent" ], - "summary": "Get vendor settings", + "summary": "[Beta] Get the issues agent config for a session", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -33305,7 +34123,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33315,7 +34143,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33325,7 +34153,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33335,7 +34163,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33343,7 +34181,7 @@ }, "x-public": true }, - "put": { + "post": { "security": [ { "API Key": [] @@ -33355,15 +34193,15 @@ "Bearer Auth": [] } ], - "description": "Replaces vendor settings.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nConfigures the issues agent for the given tracer session and enqueues\nthe initial scan. Fails if an agent already exists for the session.", "tags": [ - "mcp_vendors" + "issues-agent" ], - "summary": "Replace vendor settings", + "summary": "[Beta] Create the issues agent for a session", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -33372,12 +34210,12 @@ } ], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" } } } @@ -33387,7 +34225,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33397,7 +34235,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33407,17 +34245,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33429,13 +34277,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + "$ref": "#/components/schemas/tracer_session_issues_agent.CreateIssuesAgentRequest" } } } } }, - "post": { + "delete": { "security": [ { "API Key": [] @@ -33447,15 +34295,15 @@ "Bearer Auth": [] } ], - "description": "Initializes vendor settings.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nRemoves the agent config, its issues, and the agent-overview hub repo.", "tags": [ - "mcp_vendors" + "issues-agent" ], - "summary": "Create vendor settings", + "summary": "[Beta] Delete the issues agent for a session", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -33464,22 +34312,15 @@ } ], "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33489,7 +34330,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33499,7 +34340,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33509,35 +34350,25 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" - } - } - } - } + "x-public": true }, - "delete": { + "patch": { "security": [ { "API Key": [] @@ -33549,15 +34380,15 @@ "Bearer Auth": [] } ], - "description": "Removes vendor settings.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nPatches the agent config. All side effects (clearing fix fields when\nthe GitHub repo changes, setting agent_overview_repo_id) happen in a\nsingle CRUD transaction. Omitted fields are left unchanged.", "tags": [ - "mcp_vendors" + "issues-agent" ], - "summary": "Delete vendor settings", + "summary": "[Beta] Update the issues agent config for a session", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -33571,7 +34402,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33581,7 +34422,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33591,7 +34432,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33601,17 +34442,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.UpdateIssuesAgentRequest" + } + } + } + } } }, - "/v1/platform/mcp-vendors/{vendor_slug}/tools": { - "get": { + "/api/v1/platform/sessions/{session_id}/issues-agent/overview": { + "patch": { "security": [ { "API Key": [] @@ -33623,38 +34484,20 @@ "Bearer Auth": [] } ], - "description": "Returns the tool catalog for this vendor.", + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nSaves the issues agent overview content server-side, creating or updating\nthe backing private Prompt Hub repo and linking it to the issues agent config.", "tags": [ - "mcp_vendors" + "issues-agent" ], - "summary": "List tools for a vendor", + "summary": "[Beta] Save the agent overview for a session", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "Max tools to return (default 50)", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Number of tools to skip (default 0)", - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "title": "Offset" - } } ], "responses": { @@ -33663,7 +34506,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListVendorToolsResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33673,7 +34526,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33683,7 +34536,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -33693,37 +34546,86 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewRequest" + } + } + } + } } }, - "/v1/platform/ops/backfills/restart": { + "/api/v1/platform/sessions/{session_id}/issues-agent/webhooks/{id}/roll-secret": { "post": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Deletes the backfill job record, causing the backfill to restart from the beginning on the next cron tick. Requires instance admin access.", + "description": "Replaces the signing secret for the given issues agent webhook and returns the\nupdated webhook. Future deliveries are signed with the new secret immediately.", "tags": [ - "backfills" + "issues-agent" + ], + "summary": "Roll an issues agent webhook signing secret", + "parameters": [ + { + "description": "Tracer session ID (UUID)", + "name": "session_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Webhook ID (UUID)", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Restart a backfill job", - "parameters": [], "responses": { "200": { - "description": "Backfill restarted", + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent_webhooks.IssuesAgentWebhook" + } + } + } + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -33735,8 +34637,8 @@ } } }, - "400": { - "description": "Bad request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -33762,7 +34664,7 @@ } }, "404": { - "description": "Backfill not found", + "description": "Not Found", "content": { "application/json": { "schema": { @@ -33775,7 +34677,7 @@ } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -33788,254 +34690,269 @@ } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/backfills.restartBackfillRequest" - } - } - } - } + "x-public": true } }, - "/v1/platform/orgs/current/access-policies": { + "/api/v1/platform/sessions/{session_id}/issues/views": { "get": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Lists all access policies for the organization.", + "description": "**Beta:** Returns the issues in this session that the current\nuser has opened, with timestamps. Used by the UI to derive\nthe per-row \"unread\" indicator and the Engine tab badge.", "tags": [ - "access_policies" + "issues" + ], + "summary": "[Beta] List viewed issues for a session", + "parameters": [ + { + "description": "Session ID (UUID)", + "name": "session_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "List access policies", "responses": { "200": { - "description": "List of access policies", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.ListAccessPoliciesResponse" + "$ref": "#/components/schemas/tracer_session_issues.ListViewsResponse" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } } }, - "x-public": true, - "parameters": [] - }, - "post": { + "x-public": true + } + }, + "/api/v1/platform/tools": { + "get": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Creates a new access policy.", + "description": "Returns a paginated list of tools in the workspace.", "tags": [ - "access_policies" + "tools" + ], + "summary": "List tools", + "parameters": [ + { + "description": "Maximum number of tools to return", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Number of tools to skip", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" + } + }, + { + "description": "Search query to filter tools by name or description", + "name": "query", + "in": "query", + "schema": { + "type": "string", + "title": "Query" + } + } ], - "summary": "Create an access policy", - "parameters": [], "responses": { - "201": { - "description": "Access policy created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.AccessPolicyCreateResponse" + "$ref": "#/components/schemas/tools.ListToolsResponse" } } } }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "404": { - "description": "Role not found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/authz_internal.CreateAccessPolicyPayload" - } - } - } - } - } - }, - "/v1/platform/orgs/current/access-policies/roles/{role_id}/access-policies": { + "x-public": true + }, "post": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Attaches one or more access policies to a specific role. The request body must contain an array of access policy IDs.", + "description": "Creates a new tool in the workspace.", "tags": [ - "access_policies" - ], - "summary": "Attach access policies to a role", - "parameters": [ - { - "description": "Role ID", - "name": "role_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "tools" ], + "summary": "Create a tool", + "parameters": [], "responses": { - "204": { - "description": "Access policies attached successfully" - }, - "400": { - "description": "Bad request", - "content": { + "201": { + "description": "Created", + "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.Tool" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "404": { - "description": "Role not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34047,35 +34964,35 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" + "$ref": "#/components/schemas/tools.CreateToolPayload" } } } } } }, - "/v1/platform/orgs/current/access-policies/{access_policy_id}": { + "/api/v1/platform/tools/id/{id}": { "get": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Gets a specific access policy by ID.", + "description": "Returns a tool identified by its UUID.", "tags": [ - "access_policies" + "tools" ], - "summary": "Get an access policy", + "summary": "Get a tool by ID", "parameters": [ { - "description": "Access Policy ID", - "name": "access_policy_id", + "description": "Tool UUID", + "name": "id", "in": "path", "required": true, "schema": { @@ -34085,61 +35002,61 @@ ], "responses": { "200": { - "description": "Access policy details", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.AccessPolicy" + "$ref": "#/components/schemas/tools.Tool" } } } }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "404": { - "description": "Access policy not found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34153,21 +35070,21 @@ "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Deletes a specific access policy by ID.", + "description": "Deletes a tool identified by its UUID.", "tags": [ - "access_policies" + "tools" ], - "summary": "Delete an access policy", + "summary": "Delete a tool by ID", "parameters": [ { - "description": "Access Policy ID", - "name": "access_policy_id", + "description": "Tool UUID", + "name": "id", "in": "path", "required": true, "schema": { @@ -34177,14 +35094,24 @@ ], "responses": { "204": { - "description": "Access policy deleted successfully" + "description": "No Content" }, "400": { - "description": "Bad request", + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34194,73 +35121,79 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/orgs/current/info": { - "get": { + }, + "patch": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns organization info for the authenticated user's current organization.", + "description": "Updates an existing tool identified by its UUID.", "tags": [ - "Organizations" + "tools" + ], + "summary": "Update a tool by ID", + "parameters": [ + { + "description": "Tool UUID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Get current organization info", "responses": { "200": { - "description": "Organization info", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/orgs.OrganizationInfo" + "$ref": "#/components/schemas/tools.Tool" } } } }, "400": { - "description": "Invalid organization ID", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34270,263 +35203,186 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, "x-public": true, - "parameters": [] + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.UpdateToolPayload" + } + } + } + } } }, - "/v1/platform/orgs/current/members": { + "/api/v1/platform/tools/{handle}": { "get": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns a paginated list of org members (active and pending) enriched with workspace memberships.", + "description": "Returns a tool identified by its handle.", "tags": [ - "orgs" + "tools" ], - "summary": "List org members with workspace roles", + "summary": "Get a tool by handle", "parameters": [ { - "description": "Page size (default 50, max 500)", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Page offset (default 0)", - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "title": "Offset" - } - }, - { - "description": "Filter: true = only active members; false = only pending members", - "name": "active_is", - "in": "query", - "schema": { - "type": "boolean", - "title": "Active Is" - } - }, - { - "description": "Filter: true = only pending members; false = only active members", - "name": "pending_is", - "in": "query", - "schema": { - "type": "boolean", - "title": "Pending Is" - } - }, - { - "description": "Glob filter on display name; use * as wildcard (repeatable, matches any)", - "name": "name_like", - "in": "query", - "style": "form", - "explode": true, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Name Like" - } - }, - { - "description": "Glob filter on email; use * as wildcard (repeatable, matches any)", - "name": "email_like", - "in": "query", - "style": "form", - "explode": true, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Email Like" - } - }, - { - "description": "Glob filter on workspace name or ID; use * as wildcard (repeatable, matches any)", - "name": "workspace_name_like", - "in": "query", - "style": "form", - "explode": true, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Workspace Name Like" - } - }, - { - "description": "Glob filter on organization role name; use * as wildcard (repeatable, matches any)", - "name": "organization_role_like", - "in": "query", - "style": "form", - "explode": true, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Organization Role Like" - } - }, - { - "description": "Glob filter on workspace role name; use * as wildcard (repeatable, matches any)", - "name": "workspace_role_like", - "in": "query", - "style": "form", - "explode": true, + "description": "Tool handle", + "name": "handle", + "in": "path", + "required": true, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Workspace Role Like" + "type": "string" } } ], "responses": { "200": { - "description": "Org members", - "headers": { - "X-Members-Anonymity-Restricted": { - "description": "Set to 'true' when the response was restricted by the organization's anonymity setting.", - "schema": { - "type": "string" - } - }, - "X-Members-List-All-Workspaces": { - "description": "true if caller has organization:manage", + "description": "OK", + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/tools.Tool" } - }, - "X-Pagination-Total": { - "description": "Total number of matching members", + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/tools.ErrorResponse" } } - }, + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/orgs.OrgMemberEnriched" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "400": { - "description": "Bad request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/orgs/current/scim/tokens": { - "get": { + }, + "delete": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "List all SCIM bearer tokens for the current organization. The full token values are not returned.", + "description": "Deletes a tool identified by its handle.", "tags": [ - "SCIM Tokens" + "tools" + ], + "summary": "Delete a tool by handle", + "parameters": [ + { + "description": "Tool handle", + "name": "handle", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "List SCIM tokens", "responses": { - "200": { - "description": "List of SCIM tokens", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34536,70 +35392,89 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, "403": { - "description": "Forbidden - requires OrganizationRead permission", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-public": true, - "parameters": [] + "x-public": true }, - "post": { + "patch": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Create a new SCIM bearer token for the current organization. The full token value is only returned once upon creation.", + "description": "Updates an existing tool identified by its handle.", "tags": [ - "SCIM Tokens" + "tools" + ], + "summary": "Update a tool by handle", + "parameters": [ + { + "description": "Tool handle", + "name": "handle", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Create a SCIM token", - "parameters": [], "responses": { - "201": { - "description": "Created SCIM token with full token value", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ScimTokenSensitiveResponse" + "$ref": "#/components/schemas/tools.Tool" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34609,37 +35484,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, "403": { - "description": "Forbidden - requires OrganizationManage permission", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34651,35 +35526,24 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.CreateScimTokenPayload" + "$ref": "#/components/schemas/tools.UpdateToolPayload" } } } } } }, - "/v1/platform/orgs/current/scim/tokens/{scim_token_id}": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Retrieve a specific SCIM token by ID for the current organization. The full token value is not returned.", + "/api/v2/datasets/public/{share_token}/experiment-runs": { + "post": { + "description": "Public share-token variant of POST /v2/datasets/{dataset_id}/experiment-runs.\nReturns a paginated page of dataset examples with runs from the requested experiments.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "SCIM Tokens" + "datasets" ], - "summary": "Get a SCIM token", + "summary": "Fetch shared experiment runs for dataset examples", "parameters": [ { - "description": "SCIM Token ID", - "name": "scim_token_id", + "description": "Dataset share token", + "name": "share_token", "in": "path", "required": true, "schema": { @@ -34689,89 +35553,100 @@ ], "responses": { "200": { - "description": "SCIM token details", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" } } } }, - "401": { - "description": "Unauthorized", - "content": { + "400": { + "description": "Bad Request", + "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden - requires OrganizationRead permission", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Token not found", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "502": { + "description": "Bad Gateway", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true - }, - "delete": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" + } + } + } + } + } + }, + "/api/v2/datasets/{dataset_id}/experiment-runs": { + "post": { "security": [ { - "API Key": [] - }, - { - "Organization ID": [] + "API Key": [], + "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Delete a SCIM bearer token from the current organization.", + "description": "Returns a paginated page of dataset examples with runs from the requested experiments.\nResponse uses the canonical `{items, next_cursor}` envelope.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "SCIM Tokens" + "datasets" ], - "summary": "Delete a SCIM token", + "summary": "Fetch experiment runs for dataset examples", "parameters": [ { - "description": "SCIM Token ID", - "name": "scim_token_id", + "description": "Dataset ID", + "name": "dataset_id", "in": "path", "required": true, "schema": { @@ -34780,97 +35655,22 @@ } ], "responses": { - "204": { - "description": "No content - token deleted successfully" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden - requires OrganizationManage permission", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" - } - } - } - }, - "404": { - "description": "Token not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" } } } - } - }, - "x-public": true - }, - "patch": { - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] }, - { - "Bearer Auth": [] - } - ], - "description": "Update the description of an existing SCIM token for the current organization.", - "tags": [ - "SCIM Tokens" - ], - "summary": "Update a SCIM token", - "parameters": [ - { - "description": "SCIM Token ID", - "name": "scim_token_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Updated SCIM token details", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -34880,47 +35680,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden - requires OrganizationManage permission", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Token not found", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "502": { + "description": "Bad Gateway", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -34932,112 +35732,73 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.UpdateScimTokenPayload" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" } } } } } }, - "/v1/platform/sessions/{sessionID}/agent-versions": { + "/api/v2/public/{share_token}/run/{run_id}": { "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Returns all agent versions (commit SHAs) seen in the given tracing project, ordered by first_seen_at descending.", + "description": "Returns one run within the trace identified by the share token. The request supplies only the run ID and that run's exact start_time coordinate.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "sessions" + "runs" ], - "summary": "List agent versions for a project", + "summary": "Get a public shared trace run", "parameters": [ { - "description": "Tracing project (session) UUID", - "name": "sessionID", - "in": "path", - "required": true, + "description": "application/json", + "name": "Accept", + "in": "header", "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "Agent versions", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_sessions.AgentVersionResponse" - } - } - } - } }, - "400": { - "description": "Invalid session ID", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } + { + "description": "Share token UUID", + "name": "share_token", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - } - }, - "x-public": true - } - }, - "/v1/platform/sessions/{session_id}/issues-agent": { - "get": { - "security": [ { - "API Key": [] + "description": "Run UUID", + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } }, { - "Tenant ID": [] + "description": "Run start_time coordinate (RFC3339)", + "name": "start_time", + "in": "query", + "required": true, + "schema": { + "format": "date-time", + "type": "string", + "title": "Start Time" + } }, { - "Bearer Auth": [] - } - ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns the issues agent config attached to the given tracer session.", - "tags": [ - "issues-agent" - ], - "summary": "[Beta] Get the issues agent config for a session", - "parameters": [ - { - "description": "Tracer session ID (UUID)", - "name": "session_id", - "in": "path", + "description": "repeatable public run fields to include", + "name": "selects", + "in": "query", "required": true, + "style": "form", + "explode": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + }, + "title": "Selects" } } ], @@ -35047,149 +35808,177 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + "$ref": "#/components/schemas/query.RunResponse" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (missing or malformed start_time)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "share token or run not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "501": { + "description": "no V2 backend configured and no V1 proxy fallback", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, "x-public": true - }, + } + }, + "/api/v2/public/{share_token}/runs/query": { "post": { - "security": [ + "description": "Returns all runs within the trace identified by the share token. The share token supplies the tenant, project, and trace scope.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "runs" + ], + "summary": "Query public shared trace runs", + "parameters": [ { - "API Key": [] + "description": "application/json", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } }, { - "Tenant ID": [] + "description": "application/json", + "name": "Content-Type", + "in": "header", + "schema": { + "type": "string" + } }, { - "Bearer Auth": [] - } - ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nConfigures the issues agent for the given tracer session and enqueues\nthe initial scan. Fails if an agent already exists for the session.", - "tags": [ - "issues-agent" - ], - "summary": "[Beta] Create the issues agent for a session", - "parameters": [ - { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + "$ref": "#/components/schemas/query.QueryTraceResponseBody" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "share token or shared trace not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "Conflict", + "501": { + "description": "no V2 backend configured and no V1 proxy fallback", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35201,123 +35990,270 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.CreateIssuesAgentRequest" + "$ref": "#/components/schemas/query.PublicSharedTraceRunsRequestBody" } } } } - }, - "delete": { + } + }, + "/api/v2/runs/query": { + "post": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nRemoves the agent config, its issues, and the agent-overview hub repo.", + "description": "Returns a paginated list of runs for the given projects within min/max start_time. Supports filters, cursor pagination, and `selects` to select fields to return.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "issues-agent" + "runs" ], - "summary": "[Beta] Delete the issues agent for a session", + "summary": "Query runs", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", - "in": "path", - "required": true, + "description": "application/json", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } + }, + { + "description": "application/json (required for JSON body)", + "name": "Content-Type", + "in": "header", "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/query.QueryRunsResponseBody" + } + } + } }, "400": { - "description": "Bad Request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "x-public": true - }, - "patch": { - "security": [ - { - "API Key": [] }, - { - "Tenant ID": [] + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } }, - { - "Bearer Auth": [] - } - ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nPatches the agent config. All side effects (clearing fix fields when\nthe GitHub repo changes, setting agent_overview_repo_id) happen in a\nsingle CRUD transaction. Omitted fields are left unchanged.", - "tags": [ - "issues-agent" - ], - "summary": "[Beta] Update the issues agent config for a session", + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/query.QueryRunsRequestBody" + } + } + } + } + } + }, + "/api/v2/runs/{run_id}": { + "get": { + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "description": "Returns one run by ID for the given session. Use the `selects` query parameter (repeatable) to select fields to return.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "runs" + ], + "summary": "Get a single run", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "application/json", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } + }, + { + "description": "Run UUID", + "name": "run_id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } + }, + { + "description": "`project_id` is the UUID of the tracing project that owns the run.", + "name": "project_id", + "in": "query", + "required": true, + "schema": { + "format": "uuid", + "type": "string", + "title": "Project Id" + } + }, + { + "description": "`selects` lists which properties to include on the returned run (repeatable query parameter). Accepts any value of the `RunSelectField` enum. If omitted, only `id` is returned.", + "name": "selects", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "enum": [ + "ID", + "NAME", + "RUN_TYPE", + "STATUS", + "START_TIME", + "END_TIME", + "LATENCY_SECONDS", + "FIRST_TOKEN_TIME", + "ERROR", + "ERROR_PREVIEW", + "EXTRA", + "METADATA", + "EVENTS", + "INPUTS", + "INPUTS_PREVIEW", + "OUTPUTS", + "OUTPUTS_PREVIEW", + "MANIFEST", + "PARENT_RUN_IDS", + "PROJECT_ID", + "TRACE_ID", + "THREAD_ID", + "DOTTED_ORDER", + "IS_ROOT", + "REFERENCE_EXAMPLE_ID", + "REFERENCE_DATASET_ID", + "TOTAL_TOKENS", + "PROMPT_TOKENS", + "COMPLETION_TOKENS", + "TOTAL_COST", + "PROMPT_COST", + "COMPLETION_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "PRICE_MODEL_ID", + "TAGS", + "APP_PATH", + "ATTACHMENTS", + "THREAD_EVALUATION_TIME", + "IS_IN_DATASET", + "LAST_QUEUED_AT", + "SHARE_URL", + "FEEDBACK_STATS" + ], + "type": "string" + }, + "title": "Selects" + } + }, + { + "description": "`start_time` is the run's `start_time` (RFC3339 date-time). Providing it speeds up retrieval.", + "name": "start_time", + "in": "query", + "schema": { + "format": "date-time", + "type": "string", + "title": "Start Time" + } } ], "responses": { @@ -35326,77 +36262,107 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + "$ref": "#/components/schemas/query.RunResponse" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (missing or invalid query parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "run or session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.UpdateIssuesAgentRequest" + }, + "501": { + "description": "not implemented", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } } } } - } + }, + "x-public": true } }, - "/v1/platform/sessions/{session_id}/issues-agent/overview": { - "patch": { + "/api/v2/runs/{run_id}/share": { + "post": { "security": [ { "API Key": [] @@ -35408,18 +36374,19 @@ "Bearer Auth": [] } ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nSaves the issues agent overview content server-side, creating or updating\nthe backing private Prompt Hub repo and linking it to the issues agent config.", + "description": "Creates or returns a share token for a run. Child runs share their trace root.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "issues-agent" + "runs" ], - "summary": "[Beta] Save the agent overview for a session", + "summary": "Share a run", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "Run UUID", + "name": "run_id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } } @@ -35430,7 +36397,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewResponse" + "$ref": "#/components/schemas/share.CreateShareTokenResponseBody" } } } @@ -35440,7 +36407,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35450,7 +36417,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35460,7 +36427,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35470,7 +36437,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "413": { + "description": "Request Entity Too Large", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35480,7 +36457,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35492,48 +36469,68 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewRequest" + "$ref": "#/components/schemas/share.CreateShareTokenRequestBody" } } } } } }, - "/v1/platform/sessions/{session_id}/issues-agent/webhooks/{id}/roll-secret": { - "post": { + "/api/v2/runs/{run_id}/url": { + "get": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Replaces the signing secret for the given issues agent webhook and returns the\nupdated webhook. Future deliveries are signed with the new secret immediately.", + "description": "Returns the URL to view a specific run in the LangSmith UI. The caller must supply the\nrun's project_id and trace_id as query parameters; start_time is optional.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "issues-agent" + "runs" ], - "summary": "Roll an issues agent webhook signing secret", + "summary": "Get the LangSmith UI URL for a run", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "Run UUID", + "name": "run_id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } }, { - "description": "Webhook ID (UUID)", - "name": "id", - "in": "path", + "description": "Project (session) UUID", + "name": "project_id", + "in": "query", "required": true, "schema": { - "type": "string" + "type": "string", + "title": "Project Id" + } + }, + { + "description": "Trace UUID", + "name": "trace_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Trace Id" + } + }, + { + "description": "Run start time in RFC3339 format; omit if unknown", + "name": "start_time", + "in": "query", + "schema": { + "type": "string", + "title": "Start Time" } } ], @@ -35543,72 +36540,47 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent_webhooks.IssuesAgentWebhook" + "$ref": "#/components/schemas/query.RunURLResponse" } } } }, "400": { - "description": "Bad Request", + "description": "missing or invalid query parameters", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "project not found or does not belong to this workspace", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35617,8 +36589,8 @@ "x-public": true } }, - "/v1/platform/sessions/{session_id}/issues/views": { - "get": { + "/api/v2/runs/{trace_id}/share": { + "delete": { "security": [ { "API Key": [] @@ -35630,39 +36602,33 @@ "Bearer Auth": [] } ], - "description": "**Beta:** Returns the issues in this session that the current\nuser has opened, with timestamps. Used by the UI to derive\nthe per-row \"unread\" indicator and the Engine tab badge.", + "description": "Deletes the share token for the trace identified by trace_id and session_id. Idempotent: returns 204 whether or not a share token existed.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "issues" + "runs" ], - "summary": "[Beta] List viewed issues for a session", + "summary": "Unshare a run", "parameters": [ { - "description": "Session ID (UUID)", - "name": "session_id", + "description": "Trace root UUID", + "name": "trace_id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ListViewsResponse" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35672,7 +36638,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35682,7 +36648,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "413": { + "description": "Request Entity Too Large", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35692,16 +36668,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/share.DeleteShareTokenRequestBody" + } + } + } + } } }, - "/v1/platform/tools": { + "/api/v2/sandboxes/boxes": { "get": { "security": [ { @@ -35712,39 +36698,96 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Returns a paginated list of tools in the workspace.", + "description": "List sandboxes for the authenticated tenant, with optional filtering, sorting, and pagination.", "tags": [ - "tools" + "sandboxes" ], - "summary": "List tools", + "summary": "List sandboxes", "parameters": [ { - "description": "Maximum number of tools to return", + "description": "Maximum number of results", "name": "limit", "in": "query", "schema": { "type": "integer", + "default": 50, "title": "Limit" } }, { - "description": "Number of tools to skip", + "description": "Pagination offset", "name": "offset", "in": "query", "schema": { "type": "integer", + "default": 0, "title": "Offset" } }, { - "description": "Search query to filter tools by name or description", - "name": "query", + "description": "Filter by name substring", + "name": "name_contains", "in": "query", "schema": { "type": "string", - "title": "Query" + "title": "Name Contains" + } + }, + { + "description": "Filter by status (provisioning, ready, failed, stopped, deleting)", + "name": "status", + "in": "query", + "schema": { + "type": "string", + "title": "Status" + } + }, + { + "description": "Filter by creator identity. Only 'me' is supported.", + "name": "created_by", + "in": "query", + "schema": { + "type": "string", + "title": "Created By" + } + }, + { + "description": "Filter by label. Repeatable; all must match. Use 'key' to match on key presence or 'key=value' for equality.", + "name": "label", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Label" + } + }, + { + "description": "Sort column (name, status, created_at)", + "name": "sort_by", + "in": "query", + "schema": { + "type": "string", + "default": "created_at", + "title": "Sort By" + } + }, + { + "description": "Sort direction (asc, desc)", + "name": "sort_direction", + "in": "query", + "schema": { + "type": "string", + "default": "desc", + "title": "Sort Direction" } } ], @@ -35754,7 +36797,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ListToolsResponse" + "$ref": "#/components/schemas/sandboxes.SandboxListResponse" } } } @@ -35764,17 +36807,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35784,7 +36817,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35794,7 +36827,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35812,13 +36845,16 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Creates a new tool in the workspace.", + "description": "Create a new sandbox from a snapshot. Provide at most one of `snapshot_id` or `snapshot_name`; if neither is provided, the server uses the default snapshot.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Create a tool", + "summary": "Create a sandbox", "parameters": [], "responses": { "201": { @@ -35826,57 +36862,67 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, "400": { - "description": "Bad Request", + "description": "Snapshot not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "409": { + "description": "Name already exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "429": { + "description": "Quota exceeded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Sandbox creation failed or internal error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "504": { + "description": "Sandbox did not become ready in time", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35888,15 +36934,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.CreateToolPayload" + "$ref": "#/components/schemas/sandboxes.CreateSandboxPayload" } } } } } }, - "/v1/platform/tools/id/{id}": { - "get": { + "/api/v2/sandboxes/boxes/batch-delete": { + "post": { "security": [ { "API Key": [] @@ -35908,29 +36954,19 @@ "Bearer Auth": [] } ], - "description": "Returns a tool identified by its UUID.", + "description": "Delete multiple sandboxes by name or UUID in a single request.", "tags": [ - "tools" - ], - "summary": "Get a tool by ID", - "parameters": [ - { - "description": "Tool UUID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "sandboxes" ], + "summary": "Batch delete sandboxes", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "$ref": "#/components/schemas/sandboxes.BatchDeleteResponse" } } } @@ -35940,17 +36976,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35960,17 +36986,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35980,15 +36996,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true - }, - "delete": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.BatchDeleteRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}": { + "get": { "security": [ { "API Key": [] @@ -35998,17 +37026,20 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Deletes a tool identified by its UUID.", + "description": "Retrieve a sandbox by name. Stale provisioning sandboxes are auto-failed.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Delete a tool by ID", + "summary": "Get a sandbox", "parameters": [ { - "description": "Tool UUID", - "name": "id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -36017,45 +37048,80 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } + } + }, + "x-public": true + }, + "delete": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + }, + { + "X-Service-Key": [] + } + ], + "description": "Delete a sandbox by name or UUID. Tears down the sandbox runtime and removes the DB record.", + "tags": [ + "sandboxes" + ], + "summary": "Delete a sandbox", + "parameters": [ + { + "description": "Sandbox display name or UUID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No content" }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36065,7 +37131,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36083,17 +37149,20 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Updates an existing tool identified by its UUID.", + "description": "Update a sandbox's display name. The name must be unique within the tenant.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Update a tool by ID", + "summary": "Update a sandbox", "parameters": [ { - "description": "Tool UUID", - "name": "id", + "description": "Current sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -36107,47 +37176,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "409": { + "description": "Name already exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36157,7 +37216,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36169,15 +37228,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.UpdateToolPayload" + "$ref": "#/components/schemas/sandboxes.UpdateSandboxPayload" } } } } } }, - "/v1/platform/tools/{handle}": { - "get": { + "/api/v2/sandboxes/boxes/{name}/service-url": { + "post": { "security": [ { "API Key": [] @@ -36189,15 +37248,15 @@ "Bearer Auth": [] } ], - "description": "Returns a tool identified by its handle.", + "description": "Create a short-lived JWT for accessing an HTTP service running on a specific port inside a sandbox. Returns a browser_url (sets auth cookie via redirect), a service_url (for use with the X-Langsmith-Sandbox-Service-Token header), the raw token, and its expiry.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Get a tool by handle", + "summary": "Generate a service access token", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -36211,7 +37270,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "$ref": "#/components/schemas/sandboxes.ServiceURLResponse" } } } @@ -36221,55 +37280,67 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true - }, - "delete": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ServiceURLPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}/snapshot": { + "post": { "security": [ { "API Key": [] @@ -36281,15 +37352,15 @@ "Bearer Auth": [] } ], - "description": "Deletes a tool identified by its handle.", + "description": "Create a snapshot by capturing the current state of a sandbox or promoting an existing checkpoint.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Delete a tool by handle", + "summary": "Capture a snapshot from a sandbox", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -36298,25 +37369,22 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36326,7 +37394,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36336,7 +37404,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36346,15 +37424,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true - }, - "patch": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.CaptureSnapshotPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}/start": { + "post": { "security": [ { "API Key": [] @@ -36366,15 +37456,15 @@ "Bearer Auth": [] } ], - "description": "Updates an existing tool identified by its handle.", + "description": "Start a stopped or failed sandbox. This endpoint is not idempotent.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Update a tool by handle", + "summary": "Start a sandbox", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -36383,12 +37473,12 @@ } ], "responses": { - "200": { - "description": "OK", + "202": { + "description": "Accepted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } @@ -36398,17 +37488,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36418,7 +37498,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36428,7 +37508,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36438,36 +37518,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.UpdateToolPayload" - } - } - } - } + "x-public": true } }, - "/v2/datasets/public/{share_token}/experiment-runs": { - "post": { - "description": "Public share-token variant of POST /v2/datasets/{dataset_id}/experiment-runs.\nReturns a paginated page of dataset examples with runs from the requested experiments.", + "/api/v2/sandboxes/boxes/{name}/status": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + }, + { + "X-Service-Key": [] + } + ], + "description": "Retrieve the lightweight status of a sandbox for polling.", "tags": [ - "datasets" + "sandboxes" ], - "summary": "Fetch shared experiment runs for dataset examples", + "summary": "Get sandbox status", "parameters": [ { - "description": "Dataset share token", - "name": "share_token", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -36481,37 +37565,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.SandboxStatusResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36521,56 +37585,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" - } - } - } - } + "x-public": true } }, - "/v2/datasets/{dataset_id}/experiment-runs": { + "/api/v2/sandboxes/boxes/{name}/stop": { "post": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], - "description": "Returns a paginated page of dataset examples with runs from the requested experiments.\nResponse uses the canonical `{items, next_cursor}` envelope.", + "description": "Stop a ready sandbox. This endpoint is not idempotent; the filesystem is preserved for later restart.", "tags": [ - "datasets" + "sandboxes" ], - "summary": "Fetch experiment runs for dataset examples", + "summary": "Stop a sandbox", "parameters": [ { - "description": "Dataset ID", - "name": "dataset_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -36579,32 +37624,15 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" - } - } - } + "204": { + "description": "Sandbox stopped" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36614,17 +37642,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36634,95 +37662,59 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" - } - } - } - } + "x-public": true } }, - "/v2/public/{share_token}/run/{run_id}": { + "/api/v2/sandboxes/registries": { "get": { - "description": "**Alpha:** The request and response contract may change;\nReturns one run within the trace identified by the share token. The request supplies only the run ID and that run's exact start_time coordinate.", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "List sandbox registries for pulling private images.", "tags": [ - "runs" + "sandboxes" ], - "summary": "Get a public shared trace run", + "summary": "List registries", "parameters": [ { - "description": "application/json", - "name": "Accept", - "in": "header", - "schema": { - "type": "string" - } - }, - { - "description": "Share token UUID", - "name": "share_token", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "description": "Run UUID", - "name": "run_id", - "in": "path", - "required": true, + "description": "Maximum number of registries to return", + "name": "limit", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "integer", + "title": "Limit" } }, { - "description": "Run start_time coordinate (RFC3339)", - "name": "start_time", + "description": "Number of registries to skip", + "name": "offset", "in": "query", - "required": true, "schema": { - "type": "string", - "format": "date-time", - "title": "Start Time" + "type": "integer", + "title": "Offset" } }, { - "description": "repeatable public run fields to include", - "name": "selects", + "description": "Filter to registries whose name contains this substring", + "name": "name_contains", "in": "query", - "required": true, - "style": "form", - "explode": true, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Selects" + "type": "string", + "title": "Name Contains" } } ], @@ -36732,157 +37724,109 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.RunResponse" + "$ref": "#/components/schemas/sandboxes.RegistryListResponse" } } } }, "400": { - "description": "bad request (missing or malformed start_time)", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "share token or run not found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "503": { - "description": "service unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "504": { - "description": "gateway timeout or deadline exceeded", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v2/public/{share_token}/runs/v2/query": { + }, "post": { - "description": "**Alpha:** The request and response contract may change;\nReturns all runs within the trace identified by the share token. The share token supplies the tenant, project, and trace scope.", - "tags": [ - "runs" - ], - "summary": "Query public shared trace runs", - "parameters": [ + "security": [ { - "description": "application/json", - "name": "Accept", - "in": "header", - "schema": { - "type": "string" - } + "API Key": [] }, { - "description": "application/json", - "name": "Content-Type", - "in": "header", - "schema": { - "type": "string" - } + "Tenant ID": [] }, { - "description": "Share token UUID", - "name": "share_token", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "Bearer Auth": [] } ], + "description": "Create a sandbox registry for pulling private images.", + "tags": [ + "sandboxes" + ], + "summary": "Create a registry", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.QueryTraceResponseBody" + "$ref": "#/components/schemas/sandboxes.RegistryResponse" } } } }, "400": { - "description": "bad request (malformed JSON or invalid parameters)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "404": { - "description": "share token or shared trace not found", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "internal server error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "503": { - "description": "service unavailable", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "504": { - "description": "gateway timeout or deadline exceeded", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36894,43 +37838,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.PublicSharedTraceRunsRequestBody" + "$ref": "#/components/schemas/sandboxes.CreateRegistryPayload" } } } } } }, - "/v2/runs/query": { - "post": { + "/api/v2/sandboxes/registries/{name}": { + "get": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], - "description": "**Alpha:** The request and response contract may change;\nReturns a paginated list of runs for the given projects within min/max start_time. Supports filters, cursor pagination, and `selects` to select fields to return.", + "description": "Get a sandbox registry by name.", "tags": [ - "runs" + "sandboxes" ], - "summary": "Query runs", + "summary": "Get a registry", "parameters": [ { - "description": "application/json", - "name": "Accept", - "in": "header", - "schema": { - "type": "string" - } - }, - { - "description": "application/json (required for JSON body)", - "name": "Content-Type", - "in": "header", + "description": "Registry name", + "name": "name", + "in": "path", + "required": true, "schema": { "type": "string" } @@ -36942,321 +37880,110 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.QueryRunsResponseBody" - } - } - } - }, - "400": { - "description": "bad request (malformed JSON or invalid parameters)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "401": { - "description": "missing or invalid authentication", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.RegistryResponse" } } } }, "403": { - "description": "forbidden (insufficient permission)", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "session not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "422": { - "description": "unprocessable entity (e.g. invalid UUID)", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "503": { - "description": "service unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "504": { - "description": "gateway timeout or deadline exceeded", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/query.QueryRunsRequestBody" - } - } - } - } - } - }, - "/v2/runs/{run_id}": { - "get": { + "x-public": true + }, + "delete": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], - "description": "**Alpha:** The request and response contract may change;\nReturns one run by ID for the given session and start_time. Use the `selects` query parameter (repeatable) to select fields to return.", + "description": "Delete a sandbox registry by name.", "tags": [ - "runs" + "sandboxes" ], - "summary": "Get a single run", + "summary": "Delete a registry", "parameters": [ { - "description": "application/json", - "name": "Accept", - "in": "header", - "schema": { - "type": "string" - } - }, - { - "description": "Run UUID", - "name": "run_id", + "description": "Registry name", + "name": "name", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "description": "`project_id` is the UUID of the tracing project that owns the run.", - "name": "project_id", - "in": "query", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Project Id" - } - }, - { - "description": "`selects` lists which properties to include on the returned run (repeatable query parameter). Accepts any value of the `RunSelectField` enum. If omitted, only `id` is returned.", - "name": "selects", - "in": "query", - "style": "form", - "explode": true, - "schema": { - "items": { - "enum": [ - "ID", - "NAME", - "RUN_TYPE", - "STATUS", - "START_TIME", - "END_TIME", - "LATENCY_SECONDS", - "FIRST_TOKEN_TIME", - "ERROR", - "ERROR_PREVIEW", - "EXTRA", - "METADATA", - "EVENTS", - "INPUTS", - "INPUTS_PREVIEW", - "OUTPUTS", - "OUTPUTS_PREVIEW", - "MANIFEST", - "PARENT_RUN_IDS", - "PROJECT_ID", - "TRACE_ID", - "THREAD_ID", - "DOTTED_ORDER", - "IS_ROOT", - "REFERENCE_EXAMPLE_ID", - "REFERENCE_DATASET_ID", - "TOTAL_TOKENS", - "PROMPT_TOKENS", - "COMPLETION_TOKENS", - "TOTAL_COST", - "PROMPT_COST", - "COMPLETION_COST", - "PROMPT_TOKEN_DETAILS", - "COMPLETION_TOKEN_DETAILS", - "PROMPT_COST_DETAILS", - "COMPLETION_COST_DETAILS", - "PRICE_MODEL_ID", - "TAGS", - "APP_PATH", - "ATTACHMENTS", - "THREAD_EVALUATION_TIME", - "IS_IN_DATASET", - "SHARE_URL", - "FEEDBACK_STATS" - ], - "type": "string" - }, - "type": "array", - "title": "Selects" - } - }, - { - "description": "`start_time` is the run's `start_time` (RFC3339 date-time), used together with `project_id` to locate the run.", - "name": "start_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "format": "date-time", - "title": "Start Time" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/query.RunResponse" - } - } - } - }, - "400": { - "description": "bad request (missing or invalid query parameters)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "401": { - "description": "missing or invalid authentication", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } + "204": { + "description": "No Content" }, "403": { - "description": "forbidden (insufficient permission)", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "run or session not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "422": { - "description": "unprocessable entity (e.g. invalid UUID)", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "503": { - "description": "service unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "504": { - "description": "gateway timeout or deadline exceeded", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v2/runs/{run_id}/share": { - "post": { + }, + "patch": { "security": [ { "API Key": [] @@ -37268,20 +37995,19 @@ "Bearer Auth": [] } ], - "description": "Creates or returns a share token for a run. Child runs share their trace root.", + "description": "Update a sandbox registry's name and/or credentials.", "tags": [ - "runs" + "sandboxes" ], - "summary": "Share a run", + "summary": "Update a registry", "parameters": [ { - "description": "Run UUID", - "name": "run_id", + "description": "Registry name", + "name": "name", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -37291,7 +38017,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/share.CreateShareTokenResponseBody" + "$ref": "#/components/schemas/sandboxes.RegistryResponse" } } } @@ -37301,17 +38027,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37321,7 +38037,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37331,17 +38047,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "413": { - "description": "Request Entity Too Large", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37351,7 +38067,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37363,14 +38079,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/share.CreateShareTokenRequestBody" + "$ref": "#/components/schemas/sandboxes.UpdateRegistryPayload" } } } } } }, - "/v2/sandboxes/boxes": { + "/api/v2/sandboxes/snapshots": { "get": { "security": [ { @@ -37381,16 +38097,13 @@ }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "List sandboxes for the authenticated tenant, with optional filtering, sorting, and pagination.", + "description": "List sandbox snapshots for the authenticated tenant, with optional filtering, sorting, and pagination.", "tags": [ "sandboxes" ], - "summary": "List sandboxes", + "summary": "List snapshots", "parameters": [ { "description": "Maximum number of results", @@ -37422,7 +38135,7 @@ } }, { - "description": "Filter by status (provisioning, ready, failed, stopped, deleting)", + "description": "Filter by status (building, ready, failed, deleting)", "name": "status", "in": "query", "schema": { @@ -37440,8 +38153,22 @@ } }, { - "description": "Sort column (name, status, created_at)", - "name": "sort_by", + "description": "Filter by label. Repeatable; all must match. Use 'key' to match on key presence or 'key=value' for equality.", + "name": "label", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Label" + } + }, + { + "description": "Sort column (name, status, created_at)", + "name": "sort_by", "in": "query", "schema": { "type": "string", @@ -37466,7 +38193,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxListResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotListResponse" } } } @@ -37514,16 +38241,13 @@ }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Create a new sandbox from a snapshot. Provide at most one of `snapshot_id` or `snapshot_name`; if neither is provided, the server uses the default snapshot.", + "description": "Create a snapshot from a Docker image (async build).", "tags": [ "sandboxes" ], - "summary": "Create a sandbox", + "summary": "Create a snapshot", "parameters": [], "responses": { "201": { @@ -37531,33 +38255,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" } } } }, "400": { - "description": "Snapshot not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "409": { - "description": "Name already exists", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "422": { - "description": "Validation error", + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -37566,8 +38270,8 @@ } } }, - "429": { - "description": "Quota exceeded", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { @@ -37577,17 +38281,7 @@ } }, "500": { - "description": "Sandbox creation failed or internal error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "504": { - "description": "Sandbox did not become ready in time", + "description": "Internal Server Error", "content": { "application/json": { "schema": { @@ -37603,15 +38297,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.CreateSandboxPayload" + "$ref": "#/components/schemas/sandboxes.CreateSnapshotPayload" } } } } } }, - "/v2/sandboxes/boxes/batch-delete": { - "post": { + "/api/v2/sandboxes/snapshots/{snapshot_id}": { + "get": { "security": [ { "API Key": [] @@ -37623,19 +38317,29 @@ "Bearer Auth": [] } ], - "description": "Delete multiple sandboxes by name or UUID in a single request.", + "description": "Get a sandbox snapshot by ID.", "tags": [ "sandboxes" ], - "summary": "Batch delete sandboxes", - "parameters": [], + "summary": "Get a snapshot", + "parameters": [ + { + "description": "Snapshot UUID", + "name": "snapshot_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.BatchDeleteResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" } } } @@ -37660,6 +38364,16 @@ } } }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, "500": { "description": "Internal Server Error", "content": { @@ -37671,21 +38385,9 @@ } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.BatchDeleteRequest" - } - } - } - } - } - }, - "/v2/sandboxes/boxes/{name}": { - "get": { + "x-public": true + }, + "delete": { "security": [ { "API Key": [] @@ -37695,20 +38397,17 @@ }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Retrieve a sandbox by name. Stale provisioning sandboxes are auto-failed.", + "description": "Delete a snapshot by ID. The underlying storage is reclaimed asynchronously.", "tags": [ "sandboxes" ], - "summary": "Get a sandbox", + "summary": "Delete a snapshot", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Snapshot UUID", + "name": "snapshot_id", "in": "path", "required": true, "schema": { @@ -37717,12 +38416,25 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "Snapshot deleted" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37749,8 +38461,10 @@ } }, "x-public": true - }, - "delete": { + } + }, + "/api/v2/sandboxes/usage": { + "get": { "security": [ { "API Key": [] @@ -37765,32 +38479,18 @@ "X-Service-Key": [] } ], - "description": "Delete a sandbox by name or UUID. Tears down the sandbox runtime and removes the DB record.", + "description": "Get current sandbox resource usage and quota limits for the workspace", "tags": [ "sandboxes" ], - "summary": "Delete a sandbox", - "parameters": [ - { - "description": "Sandbox display name or UUID", - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], + "summary": "Get sandbox resource usage", "responses": { - "204": { - "description": "No content" - }, - "404": { - "description": "Not Found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.UsageResponse" } } } @@ -37806,9 +38506,12 @@ } } }, - "x-public": true - }, - "patch": { + "x-public": true, + "parameters": [] + } + }, + "/api/v2/sandboxes/{sandbox_id}/download": { + "get": { "security": [ { "API Key": [] @@ -37818,40 +38521,40 @@ }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Update a sandbox's display name. The name must be unique within the tenant.", + "description": "Download file contents from a sandbox filesystem path.", "tags": [ "sandboxes" ], - "summary": "Update a sandbox", + "summary": "Download a sandbox file", "parameters": [ { - "description": "Current sandbox display name", - "name": "name", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "File path to download", + "name": "path", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Path" + } } ], "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" - } - } - } + "description": "File content" }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -37860,8 +38563,8 @@ } } }, - "409": { - "description": "Name already exists", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { @@ -37870,8 +38573,8 @@ } } }, - "422": { - "description": "Validation error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -37891,20 +38594,10 @@ } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.UpdateSandboxPayload" - } - } - } - } + "x-public": true } }, - "/v2/sandboxes/boxes/{name}/service-url": { + "/api/v2/sandboxes/{sandbox_id}/execute": { "post": { "security": [ { @@ -37917,15 +38610,15 @@ "Bearer Auth": [] } ], - "description": "Create a short-lived JWT for accessing an HTTP service running on a specific port inside a sandbox. Returns a browser_url (sets auth cookie via redirect), a service_url (for use with the X-Langsmith-Sandbox-Service-Token header), the raw token, and its expiry.", + "description": "Execute a command inside a sandbox and return stdout, stderr, and exit code.", "tags": [ "sandboxes" ], - "summary": "Generate a service access token", + "summary": "Execute a sandbox command", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -37939,7 +38632,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ServiceURLResponse" + "$ref": "#/components/schemas/sandboxes.ExecResponse" } } } @@ -37954,8 +38647,8 @@ } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { @@ -37964,8 +38657,8 @@ } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { @@ -37983,16 +38676,6 @@ } } } - }, - "501": { - "description": "Not Implemented", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } } }, "x-public": true, @@ -38001,14 +38684,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ServiceURLPayload" + "$ref": "#/components/schemas/sandboxes.ExecRequest" } } } } } }, - "/v2/sandboxes/boxes/{name}/snapshot": { + "/api/v2/sandboxes/{sandbox_id}/execute/stream/resume": { "post": { "security": [ { @@ -38021,15 +38704,15 @@ "Bearer Auth": [] } ], - "description": "Create a snapshot by capturing the current state of a sandbox or promoting an existing checkpoint.", + "description": "Continue streaming a command started by the stream start endpoint. The offsets are also the ack for everything below them, which frees the sandbox's output buffer and unpauses a command waiting for room. Attaches only: a command the sandbox no longer has returns 404 rather than running again.", "tags": [ "sandboxes" ], - "summary": "Capture a snapshot from a sandbox", + "summary": "Resume a streamed sandbox command", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -38038,12 +38721,12 @@ } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "SSE event stream", "content": { - "application/json": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + "type": "string" } } } @@ -38078,8 +38761,8 @@ } } }, - "422": { - "description": "Unprocessable Entity", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { @@ -38105,14 +38788,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.CaptureSnapshotPayload" + "$ref": "#/components/schemas/sandboxes.ExecStreamResumeRequest" } } } } } }, - "/v2/sandboxes/boxes/{name}/start": { + "/api/v2/sandboxes/{sandbox_id}/execute/stream/start": { "post": { "security": [ { @@ -38125,15 +38808,15 @@ "Bearer Auth": [] } ], - "description": "Start a stopped or failed sandbox. This endpoint is not idempotent.", + "description": "Execute a command inside a sandbox and stream stdout/stderr as Server-Sent Events with base64 payloads. Requires a sandbox on the v2 runtime. Passing a command_id reuses a running command instead of starting a second one. The response ends with an ack_required event when the sandbox's output buffer needs an ack; continue from the reported offsets with the resume endpoint.", "tags": [ "sandboxes" ], - "summary": "Start a sandbox", + "summary": "Start a streamed sandbox command", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -38142,15 +38825,112 @@ } ], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "SSE event stream", + "content": { + "text/event-stream": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ExecStreamRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute/ws": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Open a WebSocket connection for streaming command execution inside a sandbox.", + "tags": [ + "sandboxes" + ], + "summary": "Execute a sandbox command over WebSocket", + "parameters": [ + { + "description": "Sandbox ID or name", + "name": "sandbox_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "101": { + "description": "WebSocket upgrade" }, "400": { "description": "Bad Request", @@ -38196,8 +38976,8 @@ "x-public": true } }, - "/v2/sandboxes/boxes/{name}/status": { - "get": { + "/api/v2/sandboxes/{sandbox_id}/glob": { + "post": { "security": [ { "API Key": [] @@ -38207,20 +38987,111 @@ }, { "Bearer Auth": [] + } + ], + "description": "Find files under a root path matching a glob pattern (supports **). Entries are returned in lexical order by path.", + "tags": [ + "sandboxes" + ], + "summary": "Glob a sandbox filesystem", + "parameters": [ + { + "description": "Sandbox ID or name", + "name": "sandbox_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.GlobResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.GlobRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/grep": { + "post": { + "security": [ + { + "API Key": [] }, { - "X-Service-Key": [] + "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], - "description": "Retrieve the lightweight status of a sandbox for polling.", + "description": "Search files under a root path for a literal text pattern (not a regex).", "tags": [ "sandboxes" ], - "summary": "Get sandbox status", + "summary": "Grep a sandbox filesystem", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -38234,7 +39105,122 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxStatusResponse" + "$ref": "#/components/schemas/sandboxes.GrepResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.GrepRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/tunnel": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Open a WebSocket tunnel to a specific port inside a sandbox.", + "tags": [ + "sandboxes" + ], + "summary": "Open a sandbox TCP tunnel", + "parameters": [ + { + "description": "Sandbox ID or name", + "name": "sandbox_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Target sandbox TCP port", + "name": "X-Sandbox-Port", + "in": "header", + "schema": { + "type": "integer" + } + } + ], + "responses": { + "101": { + "description": "WebSocket upgrade" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -38263,7 +39249,7 @@ "x-public": true } }, - "/v2/sandboxes/boxes/{name}/stop": { + "/api/v2/sandboxes/{sandbox_id}/upload": { "post": { "security": [ { @@ -38276,72 +39262,1416 @@ "Bearer Auth": [] } ], - "description": "Stop a ready sandbox. This endpoint is not idempotent; the filesystem is preserved for later restart.", + "description": "Upload a file to a sandbox filesystem path.", "tags": [ "sandboxes" ], - "summary": "Stop a sandbox", + "summary": "Upload a sandbox file", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Sandbox ID or name", + "name": "sandbox_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Destination file path", + "name": "path", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Path" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.UploadResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary", + "description": "File to upload" + } + }, + "required": [ + "file" + ] + } + } + } + } + } + }, + "/api/v2/threads/query": { + "post": { + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "description": "Query threads within a project (session), with cursor-based pagination.\nReturns threads matching the given time range and optional filter.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "threads" + ], + "summary": "Query Threads", + "parameters": [], + "responses": { + "200": { + "description": "items and pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/threads.QueryThreadsResponseBody" + } + } + } + }, + "400": { + "description": "bad request (malformed JSON or invalid parameters)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "missing or invalid authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "forbidden (insufficient permission)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "session not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid project UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/threads.QueryThreadsRequestBody" + } + } + } + } + } + }, + "/api/v2/threads/{thread_id}/stats": { + "get": { + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "description": "Compute aggregate stats for a single thread (turn count, latency percentiles, token/cost sums, and detail breakdowns) within a project.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "threads" + ], + "summary": "Query Single Thread Stats", + "parameters": [ + { + "description": "Thread ID", + "name": "thread_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "`filter` narrows which of the thread's traces are aggregated, using a LangSmith filter expression. For example: lt(start_time, \"2025-01-01T00:00:00Z\") or eq(trace_id, \"0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "name": "filter", + "in": "query", + "schema": { + "type": "string", + "title": "Filter" + } + }, + { + "example": [ + "TURNS", + "LATENCY_P50" + ], + "description": "`selects` lists which aggregate stats to compute and return (repeatable query parameter). At least one value is required. Accepts any value of `SingleThreadStatsSelectField`.", + "name": "selects", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "enum": [ + "TURNS", + "FIRST_START_TIME", + "LAST_START_TIME", + "LAST_END_TIME", + "LATENCY_P50", + "LATENCY_P99", + "PROMPT_TOKENS", + "PROMPT_COST", + "COMPLETION_TOKENS", + "COMPLETION_COST", + "TOTAL_TOKENS", + "TOTAL_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "FEEDBACK_STATS" + ], + "type": "string" + }, + "title": "Selects" + } + }, + { + "description": "`session_id` is the tracing project (session) UUID (required).", + "name": "session_id", + "in": "query", + "required": true, + "schema": { + "format": "uuid", + "type": "string", + "title": "Session Id" + } + } + ], + "responses": { + "200": { + "description": "aggregate stats for the thread", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/threads.QuerySingleThreadStatsResponseBody" + } + } + } + }, + "400": { + "description": "bad request (missing or invalid query parameters)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "missing or invalid authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "forbidden (insufficient permission)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "session not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid project UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v2/threads/{thread_id}/traces": { + "get": { + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "description": "Retrieve all traces belonging to a specific thread within a project.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "threads" + ], + "summary": "Query Thread Traces", + "parameters": [ + { + "description": "Thread ID", + "name": "thread_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "`cursor` is the opaque string from a previous response's `next_cursor`. Omit on the first request; pass the returned cursor to fetch the next page.", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + }, + { + "description": "`filter` narrows which traces are returned for this thread, using a LangSmith filter expression evaluated against each root trace run.\nFor example: eq(status, \"success\") or has(tags, \"production\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "name": "filter", + "in": "query", + "schema": { + "type": "string", + "title": "Filter" + } + }, + { + "example": 20, + "description": "`page_size` is the maximum number of traces to return in this response. Defaults to 20 when omitted; must be between 1 and 100 inclusive when set.", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "default": 20, + "title": "Page Size" + } + }, + { + "description": "`project_id` is the tracing project UUID (required).", + "name": "project_id", + "in": "query", + "required": true, + "schema": { + "format": "uuid", + "type": "string", + "title": "Project Id" + } + }, + { + "example": [ + "NAME", + "START_TIME" + ], + "description": "`selects` lists which properties to include on each returned trace (repeatable query parameter). Accepts any value of the `ThreadTraceSelectField` enum. Properties not listed are omitted from each trace object; `trace_id` is always returned.", + "name": "selects", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "enum": [ + "THREAD_ID", + "TRACE_ID", + "OP", + "PROMPT_TOKENS", + "COMPLETION_TOKENS", + "TOTAL_TOKENS", + "START_TIME", + "END_TIME", + "LATENCY", + "FIRST_TOKEN_TIME", + "INPUTS_PREVIEW", + "OUTPUTS_PREVIEW", + "INPUTS", + "OUTPUTS", + "ERROR", + "PROMPT_COST", + "COMPLETION_COST", + "TOTAL_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "NAME", + "ERROR_PREVIEW" + ], + "type": "string" + }, + "title": "Selects" + } + } + ], + "responses": { + "200": { + "description": "items and pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/threads.QueryThreadTracesResponseBody" + } + } + } + }, + "400": { + "description": "bad request (missing or invalid query parameters)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "missing or invalid authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "forbidden (insufficient permission)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "session not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid project UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v2/traces/query": { + "post": { + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "description": "Returns a paginated list of traces (root runs) for a single tracing project. Each item carries the trace's root run plus optional trace-wide aggregates (`total_tokens`, `total_cost`, `first_token_time`) under `trace_aggregates`, so clients never have to merge by `trace_id`.\n\nTraces are scanned within a `start_time` window: `min_start_time` defaults to 24 hours before the request, `max_start_time` defaults to the request time. Set either explicitly to widen or narrow the window.\n\nSupports filters (`trace_filter`, `tree_filter`), cursor pagination (`cursor`), and field projection (`selects`).\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "runs" + ], + "summary": "Query traces", + "parameters": [ + { + "description": "application/json (required for JSON body)", + "name": "Content-Type", + "in": "header", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/query.QueryTracesResponseBody" + } + } + } + }, + "400": { + "description": "bad request (malformed JSON or invalid parameters)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "missing or invalid authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "forbidden (insufficient permission)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "session not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/query.QueryTracesRequestBody" + } + } + } + } + } + }, + "/api/v2/traces/{trace_id}/runs": { + "get": { + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "description": "Returns runs for a trace ID within min/max start time. Optional `filter`; repeatable `selects` to select fields to return.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "runs" + ], + "summary": "List runs in a trace", + "parameters": [ + { + "description": "application/json", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } + }, + { + "description": "Trace UUID", + "name": "trace_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "description": "`filter` narrows which runs within this trace are returned, using a LangSmith filter expression evaluated against each run. For example: `eq(run_type, \"llm\")` for LLM runs only, or `eq(status, \"error\")` for failed runs.\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "name": "filter", + "in": "query", + "schema": { + "type": "string", + "title": "Filter" + } + }, + { + "description": "`max_start_time` is the optional inclusive upper bound for run `start_time` (RFC3339 date-time). Required together with `min_start_time`.", + "name": "max_start_time", + "in": "query", + "schema": { + "format": "date-time", + "type": "string", + "title": "Max Start Time" + } + }, + { + "description": "`min_start_time` is the optional inclusive lower bound for run `start_time` (RFC3339 date-time). Required together with `max_start_time`.", + "name": "min_start_time", + "in": "query", + "schema": { + "format": "date-time", + "type": "string", + "title": "Min Start Time" + } + }, + { + "description": "`project_id` is the UUID of the tracing project that owns the trace.", + "name": "project_id", + "in": "query", + "required": true, + "schema": { + "format": "uuid", + "type": "string", + "title": "Project Id" + } + }, + { + "description": "`selects` lists which properties to include on each returned run (repeatable query parameter). Accepts any value of the `RunSelectField` enum. If omitted, only `id` is returned.", + "name": "selects", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "enum": [ + "ID", + "NAME", + "RUN_TYPE", + "STATUS", + "START_TIME", + "END_TIME", + "LATENCY_SECONDS", + "FIRST_TOKEN_TIME", + "ERROR", + "ERROR_PREVIEW", + "EXTRA", + "METADATA", + "EVENTS", + "INPUTS", + "INPUTS_PREVIEW", + "OUTPUTS", + "OUTPUTS_PREVIEW", + "MANIFEST", + "PARENT_RUN_IDS", + "PROJECT_ID", + "TRACE_ID", + "THREAD_ID", + "DOTTED_ORDER", + "IS_ROOT", + "REFERENCE_EXAMPLE_ID", + "REFERENCE_DATASET_ID", + "TOTAL_TOKENS", + "PROMPT_TOKENS", + "COMPLETION_TOKENS", + "TOTAL_COST", + "PROMPT_COST", + "COMPLETION_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "PRICE_MODEL_ID", + "TAGS", + "APP_PATH", + "ATTACHMENTS", + "THREAD_EVALUATION_TIME", + "IS_IN_DATASET", + "LAST_QUEUED_AT", + "SHARE_URL", + "FEEDBACK_STATS" + ], + "type": "string" + }, + "title": "Selects" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/query.QueryTraceResponseBody" + } + } + } + }, + "400": { + "description": "bad request (missing or invalid query parameters)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "missing or invalid authentication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "forbidden (insufficient permission)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "session not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + } + }, + "x-public": true + } + }, + "/auth/public": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Returns public authentication information for the current workspace-level session.", + "tags": [ + "auth" + ], + "summary": "Get public auth info", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authn.PublicAuthInfo" + } + } + } + } + }, + "x-public": true, + "parameters": [] + } + }, + "/aws-marketplace/register": { + "post": { + "description": "Receives the x-amzn-marketplace-token posted by AWS Marketplace when a customer clicks \"Set Up Account\", resolves the customer identity, stores it in the DB, and redirects to the thank-you page.", + "tags": [ + "aws_marketplace" + ], + "summary": "AWS Marketplace fulfillment URL registration", + "parameters": [], + "responses": { + "303": { + "description": "Redirect to thank-you page" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "x-amzn-marketplace-token": { + "type": "string", + "description": "Registration token from AWS Marketplace" + } + }, + "required": [ + "x-amzn-marketplace-token" + ] + } + } + } + } + } + }, + "/datasets/{dataset_id}/experiment-view-overrides": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Retrieves all experiment view override configurations for a specific dataset.\nThis endpoint returns column display overrides including color gradients,\nprecision settings, and column visibility configurations that customize how\nexperiment results are displayed in the UI.\n\nThe response includes all column overrides with their display settings:\n- Column identifiers (must start with inputs, outputs, reference_outputs, feedback, metrics, attachments, or metadata)\n- Color gradients for numeric data visualization\n- Precision settings for numeric columns (1-6 decimal places)\n- Hide flags to control column visibility", + "tags": [ + "experiment-view-overrides" + ], + "summary": "Get experiment view override configurations for a dataset", + "parameters": [ + { + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved experiment view override configurations", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + } + } + } + } + }, + "400": { + "description": "Invalid dataset ID format\" example({\"error\":\"invalid dataset ID format\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "404": { + "description": "Dataset not found or not accessible\" example({\"error\":\"dataset not found or not accessible\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "500": { + "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "x-public": true + }, + "post": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Creates a new experiment view override configuration for a dataset with column display settings.\nThis endpoint allows you to customize how experiment results are displayed by configuring\ncolumn-specific overrides including colors, precision, and visibility.\n\nThe request must include a 'column_overrides' array with at least one override configuration.\nEach column override can specify:\n- column: Required field name (must start with inputs, outputs, reference_outputs, feedback, metrics, attachments, or metadata)\n- color_gradient: Optional array of [number, color] tuples for numeric data visualization\n- precision: Optional number (1-6) for decimal places in numeric columns\n- hide: Optional boolean to control column visibility\n\nExample request body:\n{\n\"column_overrides\": [\n{\n\"column\": \"outputs.accuracy\",\n\"color_gradient\": [[0.0, \"#ff0000\"], [0.5, \"#ffff00\"], [1.0, \"#00ff00\"]],\n\"precision\": 3\n},\n{\n\"column\": \"inputs.model_type\",\n\"hide\": false\n}\n]\n}\n\nThis operation fails if an override already exists for the dataset (use PATCH to update).", + "tags": [ + "experiment-view-overrides" + ], + "summary": "Create new experiment view override configuration for a dataset", + "parameters": [ + { + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Successfully created experiment view override", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + } + } + } + }, + "400": { + "description": "Invalid request data\" example({\"error\":\"column_overrides field is required\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "404": { + "description": "Dataset not found\" example({\"error\":\"dataset not found or not accessible\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "409": { + "description": "Override already exists\" example({\"error\":\"experiment view override already exists\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "422": { + "description": "Validation error\" example({\"error\":\"column name at index 0 must start with one of: inputs, outputs, reference_outputs, feedback, metrics, attachments, metadata\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "500": { + "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePostRequest" + } + } + } + } + } + }, + "/datasets/{dataset_id}/experiment-view-overrides/{id}": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Retrieves a specific experiment view override configuration using both dataset ID and override ID.\nThis endpoint provides more precise access to experiment view overrides when you have\nthe specific override ID, useful for direct links or cached references.\n\nThe response includes the same column override information as the dataset-level endpoint:\n- Column identifiers with validation prefixes\n- Color gradient settings for numeric data visualization\n- Numeric precision configurations\n- Column visibility controls\n\nBoth the dataset and override must exist and be accessible by the authenticated user.", + "tags": [ + "experiment-view-overrides" + ], + "summary": "Get experiment view override configuration by specific ID", + "parameters": [ + { + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "example": "\"123e4567-e89b-12d3-a456-426614174000\"", + "description": "Experiment view override ID", + "name": "id", "in": "path", "required": true, "schema": { + "format": "uuid", "type": "string" } } ], "responses": { - "204": { - "description": "Sandbox stopped" + "200": { + "description": "Successfully retrieved experiment view override configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + } + } + } }, "400": { - "description": "Bad Request", + "description": "Invalid ID format\" example({\"error\":\"invalid experiment view override ID format\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "Not Found", + "description": "Override not found\" example({\"error\":\"experiment view override not found\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error\" example({\"error\":\"internal server error\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, "x-public": true - } - }, - "/v2/sandboxes/registries": { - "get": { + }, + "delete": { "security": [ { "API Key": [] @@ -38353,77 +40683,87 @@ "Bearer Auth": [] } ], - "description": "List sandbox registries for pulling private images.", + "description": "Permanently deletes an experiment view override configuration for a dataset.\nThis operation removes all column override settings including color gradients,\nprecision configurations, and visibility settings.\n\nAfter deletion, the experiment view will revert to default column display settings.\nThis action cannot be undone - you will need to recreate the override configuration\nif you want to restore custom column settings.\n\nBoth the dataset and override must exist and be accessible by the authenticated user.\nThe operation will fail if the override doesn't exist or if the user doesn't have\nappropriate permissions for the dataset.", "tags": [ - "sandboxes" + "experiment-view-overrides" ], - "summary": "List registries", + "summary": "Delete experiment view override configuration", "parameters": [ { - "description": "Maximum number of registries to return", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Number of registries to skip", - "name": "offset", - "in": "query", + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, "schema": { - "type": "integer", - "title": "Offset" + "format": "uuid", + "type": "string" } }, { - "description": "Filter to registries whose name contains this substring", - "name": "name_contains", - "in": "query", + "example": "\"123e4567-e89b-12d3-a456-426614174000\"", + "description": "Experiment view override ID", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Name Contains" + "format": "uuid", + "type": "string" } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "Successfully deleted experiment view override (no content returned)" + }, + "400": { + "description": "Invalid ID format\" example({\"error\":\"invalid experiment view override ID format\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.RegistryListResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Override not found\" example({\"error\":\"experiment view override not found\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error\" example({\"error\":\"internal server error\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -38431,7 +40771,7 @@ }, "x-public": true }, - "post": { + "patch": { "security": [ { "API Key": [] @@ -38443,59 +40783,107 @@ "Bearer Auth": [] } ], - "description": "Create a sandbox registry for pulling private images.", + "description": "Updates an existing experiment view override configuration by completely replacing\nthe column overrides for the specified dataset and override ID.\n\nThis endpoint performs a complete replacement of the column overrides configuration.\nAll existing column overrides will be replaced with the new configuration provided\nin the request body. To add or modify individual columns, include the complete\ndesired configuration in the request.\n\nThe request format is identical to the create endpoint:\n- column_overrides: Required array with at least one override configuration\n- Each override can specify color gradients, precision, and visibility\n\nExample request body:\n{\n\"column_overrides\": [\n{\n\"column\": \"metrics.f1_score\",\n\"color_gradient\": [[0.0, \"#ff4444\"], [0.8, \"#44ff44\"]],\n\"precision\": 4\n},\n{\n\"column\": \"feedback.rating\",\n\"hide\": false\n}\n]\n}\n\nBoth the dataset and override must exist and be accessible by the authenticated user.", "tags": [ - "sandboxes" + "experiment-view-overrides" + ], + "summary": "Update existing experiment view override configuration", + "parameters": [ + { + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + }, + { + "example": "\"123e4567-e89b-12d3-a456-426614174000\"", + "description": "Experiment view override ID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "format": "uuid", + "type": "string" + } + } ], - "summary": "Create a registry", - "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "Successfully updated experiment view override", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.RegistryResponse" + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid request data\" example({\"error\":\"invalid experiment view override ID format\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Override not found\" example({\"error\":\"experiment view override not found\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "422": { + "description": "Validation error\" example({\"error\":\"'precision' must be between 1 and 6 for column at index 0\"})", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error\" example({\"error\":\"internal server error\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -38507,14 +40895,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.CreateRegistryPayload" + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePatchRequest" } } } } } }, - "/v2/sandboxes/registries/{name}": { + "/me/providers/{providerType}": { "get": { "security": [ { @@ -38527,15 +40915,15 @@ "Bearer Auth": [] } ], - "description": "Get a sandbox registry by name.", + "description": "Returns the provider user ID associated with the authenticated user for a given provider type, or null if not set. Scoped to the current tenant.", "tags": [ - "sandboxes" + "me" ], - "summary": "Get a registry", + "summary": "Get the authenticated user's provider user ID", "parameters": [ { - "description": "Registry name", - "name": "name", + "description": "Provider type (e.g. slack, github)", + "name": "providerType", "in": "path", "required": true, "schema": { @@ -38549,27 +40937,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.RegistryResponse" + "type": "string" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "string" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "string" } } } @@ -38579,15 +40967,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "string" } } } } }, "x-public": true - }, - "delete": { + } + }, + "/oauth/authorize": { + "get": { "security": [ { "API Key": [] @@ -38599,60 +40989,92 @@ "Bearer Auth": [] } ], - "description": "Delete a sandbox registry by name.", + "description": "Validates authorization request parameters and redirects to the frontend consent page per RFC 6749.", "tags": [ - "sandboxes" + "oauth" ], - "summary": "Delete a registry", + "summary": "Initiate OAuth2 authorization", "parameters": [ { - "description": "Registry name", - "name": "name", - "in": "path", + "description": "Must be 'code'", + "name": "response_type", + "in": "query", "required": true, "schema": { - "type": "string" + "type": "string", + "title": "Response Type" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } + { + "description": "OAuth2 client ID", + "name": "client_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Client Id" } }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } + { + "description": "Redirect URI registered with the client", + "name": "redirect_uri", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Redirect Uri" } }, - "500": { - "description": "Internal Server Error", + { + "description": "PKCE code challenge", + "name": "code_challenge", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Code Challenge" + } + }, + { + "description": "PKCE method, must be 'S256'", + "name": "code_challenge_method", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Code Challenge Method" + } + }, + { + "description": "Opaque state value to prevent CSRF", + "name": "state", + "in": "query", + "schema": { + "type": "string", + "title": "State" + } + } + ], + "responses": { + "302": { + "description": "Found" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, "x-public": true - }, - "patch": { + } + }, + "/oauth/authorize/approve": { + "post": { "security": [ { "API Key": [] @@ -38664,29 +41086,22 @@ "Bearer Auth": [] } ], - "description": "Update a sandbox registry's name and/or credentials.", + "description": "Issues an authorization code after the authenticated user approves the request. Called by the frontend consent page. Requires authentication.", "tags": [ - "sandboxes" - ], - "summary": "Update a registry", - "parameters": [ - { - "description": "Registry name", - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "oauth" ], + "summary": "Approve OAuth2 authorization request", + "parameters": [], "responses": { "200": { - "description": "OK", + "description": "JSON body with redirect_uri the frontend should navigate the browser to", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.RegistryResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -38696,37 +41111,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "409": { - "description": "Conflict", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -38736,7 +41141,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -38746,99 +41151,67 @@ "requestBody": { "required": true, "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/sandboxes.UpdateRegistryPayload" + "type": "object", + "properties": { + "organization_id": { + "type": "string", + "description": "Organization ID; must match the authenticated org" + }, + "workspace_id": { + "type": "string", + "description": "Default workspace ID; must belong to organization and be accessible to user" + }, + "client_id": { + "type": "string", + "description": "OAuth2 client ID" + }, + "redirect_uri": { + "type": "string", + "description": "Redirect URI registered with the client" + }, + "code_challenge": { + "type": "string", + "description": "PKCE code challenge" + }, + "code_challenge_method": { + "type": "string", + "description": "PKCE method, must be 'S256'" + }, + "state": { + "type": "string", + "description": "Opaque state value to prevent CSRF" + } + }, + "required": [ + "organization_id", + "client_id", + "redirect_uri", + "code_challenge", + "code_challenge_method" + ] } } - } - } - } - }, - "/v2/sandboxes/snapshots": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "List sandbox snapshots for the authenticated tenant, with optional filtering, sorting, and pagination.", - "tags": [ - "sandboxes" - ], - "summary": "List snapshots", - "parameters": [ - { - "description": "Maximum number of results", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "default": 50, - "title": "Limit" - } - }, - { - "description": "Pagination offset", - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "default": 0, - "title": "Offset" - } - }, - { - "description": "Filter by name substring", - "name": "name_contains", - "in": "query", - "schema": { - "type": "string", - "title": "Name Contains" - } - }, - { - "description": "Filter by status (building, ready, failed, deleting)", - "name": "status", - "in": "query", - "schema": { - "type": "string", - "title": "Status" - } - }, - { - "description": "Filter by creator identity. Only 'me' is supported.", - "name": "created_by", - "in": "query", - "schema": { - "type": "string", - "title": "Created By" - } - }, - { - "description": "Sort column (name, status, created_at)", - "name": "sort_by", - "in": "query", - "schema": { - "type": "string", - "default": "created_at", - "title": "Sort By" - } - }, + } + } + } + }, + "/oauth/client/{clientID}": { + "get": { + "description": "Returns the display metadata (name, logo, homepage/terms/privacy links) for a registered OAuth2 client. Used by the consent screen to show a human-readable client identity instead of the raw client_id. Public endpoint; exposes only non-sensitive display fields.", + "tags": [ + "oauth" + ], + "summary": "Get public OAuth2 client metadata", + "parameters": [ { - "description": "Sort direction (asc, desc)", - "name": "sort_direction", - "in": "query", + "description": "OAuth2 client ID", + "name": "clientID", + "in": "path", + "required": true, "schema": { - "type": "string", - "default": "desc", - "title": "Sort Direction" + "type": "string" } } ], @@ -38848,7 +41221,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotListResponse" + "$ref": "#/components/schemas/oauth.ClientPublicMetadata" } } } @@ -38858,34 +41231,26 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, "x-public": true - }, + } + }, + "/oauth/device/authorize": { "post": { "security": [ { @@ -38898,19 +41263,22 @@ "Bearer Auth": [] } ], - "description": "Create a snapshot from a Docker image (async build).", + "description": "Marks a device code as authorized for the authenticated user. Called by the /activate page when the user enters their user code. Requires authentication.", "tags": [ - "sandboxes" + "oauth" ], - "summary": "Create a snapshot", + "summary": "Authorize a device code", "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -38920,27 +41288,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -38950,17 +41318,35 @@ "requestBody": { "required": true, "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/sandboxes.CreateSnapshotPayload" + "type": "object", + "properties": { + "organization_id": { + "type": "string", + "description": "Organization ID; must match the authenticated org" + }, + "workspace_id": { + "type": "string", + "description": "Default workspace ID; must belong to organization and be accessible to user" + }, + "user_code": { + "type": "string", + "description": "User code displayed on the device" + } + }, + "required": [ + "organization_id", + "user_code" + ] } } } } } }, - "/v2/sandboxes/snapshots/{snapshot_id}": { - "get": { + "/oauth/device/code": { + "post": { "security": [ { "API Key": [] @@ -38972,29 +41358,19 @@ "Bearer Auth": [] } ], - "description": "Get a sandbox snapshot by ID.", + "description": "Issues a device code and user code for the device authorization flow per RFC 8628.", "tags": [ - "sandboxes" - ], - "summary": "Get a snapshot", - "parameters": [ - { - "description": "Snapshot UUID", - "name": "snapshot_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "oauth" ], + "summary": "Request OAuth2 device authorization", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + "$ref": "#/components/schemas/oauth.DeviceCodeResponse" } } } @@ -39004,27 +41380,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -39034,15 +41390,36 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, - "x-public": true - }, - "delete": { + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "description": "OAuth2 client ID" + } + }, + "required": [ + "client_id" + ] + } + } + } + } + } + }, + "/oauth/register": { + "post": { "security": [ { "API Key": [] @@ -39054,52 +41431,39 @@ "Bearer Auth": [] } ], - "description": "Delete a snapshot by ID. The underlying storage is reclaimed asynchronously.", + "description": "Public RFC 7591 Dynamic Client Registration endpoint. Only mints public clients with allowed loopback, HTTPS, or native client redirect URIs. Body limit 8 KB.", "tags": [ - "sandboxes" - ], - "summary": "Delete a snapshot", - "parameters": [ - { - "description": "Snapshot UUID", - "name": "snapshot_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "oauth" ], + "summary": "Register an OAuth2 dynamic client", + "parameters": [], "responses": { - "204": { - "description": "Snapshot deleted" - }, - "400": { - "description": "Bad Request", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.ClientRegistrationResponse" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "404": { - "description": "Not Found", + "413": { + "description": "Request Entity Too Large", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -39109,17 +41473,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.ClientRegistrationRequest" + } + } + } + } } }, - "/v2/sandboxes/usage": { - "get": { + "/oauth/revoke": { + "post": { "security": [ { "API Key": [] @@ -39129,23 +41503,77 @@ }, { "Bearer Auth": [] + } + ], + "description": "Revokes an access token or refresh token per RFC 7009. Always returns 200 regardless of whether the token was found.", + "tags": [ + "oauth" + ], + "summary": "Revoke an OAuth2 token", + "parameters": [], + "responses": { + "200": { + "description": "OK" + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "token": { + "type": "string", + "description": "Token to revoke (access token or refresh token)" + } + }, + "required": [ + "token" + ] + } + } + } + } + } + }, + "/oauth/token": { + "post": { + "security": [ + { + "API Key": [] }, { - "X-Service-Key": [] + "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], - "description": "Get current sandbox resource usage and quota limits for the workspace", + "description": "Token endpoint that dispatches by grant_type: authorization_code, urn:ietf:params:oauth:grant-type:device_code, or refresh_token.", "tags": [ - "sandboxes" + "oauth" ], - "summary": "Get sandbox resource usage", + "summary": "Exchange grant for OAuth2 tokens", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.UsageResponse" + "$ref": "#/components/schemas/oauth.TokenResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -39155,179 +41583,219 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, "x-public": true, - "parameters": [] + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "grant_type": { + "type": "string", + "description": "Grant type: authorization_code, urn:ietf:params:oauth:grant-type:device_code, or refresh_token" + }, + "client_id": { + "type": "string", + "description": "OAuth2 client ID" + }, + "code": { + "type": "string", + "description": "Authorization code (authorization_code grant)" + }, + "code_verifier": { + "type": "string", + "description": "PKCE code verifier (authorization_code grant)" + }, + "redirect_uri": { + "type": "string", + "description": "Redirect URI (authorization_code grant)" + }, + "device_code": { + "type": "string", + "description": "Device code (device_code grant)" + }, + "refresh_token": { + "type": "string", + "description": "Refresh token (refresh_token grant)" + } + }, + "required": [ + "grant_type", + "client_id" + ] + } + } + } + } } }, - "/v2/sandboxes/{sandbox_id}/download": { + "/orgs/current/data-planes": { "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Download file contents from a sandbox filesystem path.", + "description": "Returns up to 50 data planes owned by the caller's organization. Sorted status priority (active first), then newest first. Requires BYOC to be enabled for the org.", "tags": [ - "sandboxes" - ], - "summary": "Download a sandbox file", - "parameters": [ - { - "description": "Sandbox ID or name", - "name": "sandbox_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "File path to download", - "name": "path", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Path" - } - } + "data_planes" ], + "summary": "List data planes for the current organization", "responses": { "200": { - "description": "File content" + "description": "Data planes", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.ListPublicDataPlanesResponse" + } + } + } }, "400": { - "description": "Bad Request", + "description": "Invalid organization ID", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "BYOC not enabled for this organization", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-public": true - } - }, - "/v2/sandboxes/{sandbox_id}/execute": { + "x-public": true, + "parameters": [] + }, "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Execute a command inside a sandbox and return stdout, stderr, and exit code.", + "description": "Creates a new data plane object. Persists the rendered data plane spec, and returns 202 with the data plane in status=requested. Requires BYOC enabled org and org admin.", "tags": [ - "sandboxes" - ], - "summary": "Execute a sandbox command", - "parameters": [ - { - "description": "Sandbox ID or name", - "name": "sandbox_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "data_planes" ], + "summary": "Create a new data plane", + "parameters": [], "responses": { - "200": { - "description": "OK", + "202": { + "description": "Data plane requested", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ExecResponse" + "$ref": "#/components/schemas/data_planes.PublicDataPlane" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "BYOC not enabled or insufficient permissions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Name already exists for this organization", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } @@ -39339,35 +41807,35 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ExecRequest" + "$ref": "#/components/schemas/data_planes.CreateDataPlaneRequestAws" } } } } } }, - "/v2/sandboxes/{sandbox_id}/execute/ws": { - "get": { + "/orgs/current/data-planes/{id}": { + "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Open a WebSocket connection for streaming command execution inside a sandbox.", + "description": "Verifies that the stored customer AWS role has delete permissions, removes linked workspaces, and starts asynchronous deprovisioning for a data plane owned by the caller's organization. Requires BYOC to be enabled for the org and org admin permissions.", "tags": [ - "sandboxes" + "data_planes" ], - "summary": "Execute a sandbox command over WebSocket", + "summary": "Delete a data plane", "parameters": [ { - "description": "Sandbox ID or name", - "name": "sandbox_id", + "description": "Data plane ID", + "name": "id", "in": "path", "required": true, "schema": { @@ -39376,45 +41844,87 @@ } ], "responses": { - "101": { - "description": "WebSocket upgrade" + "202": { + "description": "Data plane deprovisioning started", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.PublicDataPlane" + } + } + } }, "400": { - "description": "Bad Request", + "description": "Invalid data plane ID or confirmed missing delete permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "403": { + "description": "BYOC not enabled or insufficient permissions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Data plane not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Data plane is not active", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39423,7 +41933,7 @@ "x-public": true } }, - "/v2/sandboxes/{sandbox_id}/tunnel": { + "/repos/{owner}/{repo}/tags/{tag_name}/history": { "get": { "security": [ { @@ -39436,15 +41946,15 @@ "Bearer Auth": [] } ], - "description": "Open a WebSocket tunnel to a specific port inside a sandbox.", + "description": "Returns the paginated audit log of transitions for a specific\ntag in a repository. Each entry records a commit change\n(from_commit → to_commit) along with who performed it.", "tags": [ - "sandboxes" + "tag-transitions" ], - "summary": "Open a sandbox TCP tunnel", + "summary": "Get tag transition history", "parameters": [ { - "description": "Sandbox ID or name", - "name": "sandbox_id", + "description": "Repository owner (tenant handle)", + "name": "owner", "in": "path", "required": true, "schema": { @@ -39452,34 +41962,62 @@ } }, { - "description": "Target sandbox TCP port", - "name": "X-Sandbox-Port", - "in": "header", + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, "schema": { - "type": "integer" + "type": "string" + } + }, + { + "description": "Tag name", + "name": "tag_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "default": 50, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" } } ], "responses": { - "101": { - "description": "WebSocket upgrade" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.TagTransitionHistoryResponse" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.ErrorResponse" } } } @@ -39489,7 +42027,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.ErrorResponse" } } } @@ -39499,7 +42037,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.ErrorResponse" } } } @@ -39508,8 +42046,46 @@ "x-public": true } }, - "/v2/sandboxes/{sandbox_id}/upload": { - "post": { + "/userinfo": { + "get": { + "security": [ + { + "Bearer Auth": [] + } + ], + "description": "Returns identity claims for the user represented by a LangSmith access token whose audience is the identity resource or the API resource. The token is passed as a Bearer credential in the Authorization header (OpenID Connect Core 1.0 §5.3).", + "tags": [ + "oauth" + ], + "summary": "Get OpenID Connect userinfo", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.UserinfoResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.TokenErrorResponse" + } + } + } + } + }, + "x-public": true, + "parameters": [] + } + }, + "/v1/agent-builder/integrations": { + "get": { "security": [ { "API Key": [] @@ -39521,39 +42097,18 @@ "Bearer Auth": [] } ], - "description": "Upload a file to a sandbox filesystem path.", + "description": "Returns default policy, integration overrides, and known integrations for the current workspace.", "tags": [ - "sandboxes" - ], - "summary": "Upload a sandbox file", - "parameters": [ - { - "description": "Sandbox ID or name", - "name": "sandbox_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Destination file path", - "name": "path", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Path" - } - } + "integrations" ], + "summary": "Get Agent Builder integrations settings", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.UploadResponse" + "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsPayload" } } } @@ -39563,7 +42118,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39573,7 +42131,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39583,7 +42144,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39593,140 +42157,82 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary", - "description": "File to upload" - } - }, - "required": [ - "file" - ] - } - } - } - } - } - }, - "/v2/threads/query": { - "post": { + "parameters": [] + }, + "put": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], - "description": "**Alpha:** The request and response contract may change;\nQuery threads within a project (session), with cursor-based pagination.\nReturns threads matching the given time range and optional filter.", + "description": "Replaces default policy and integration overrides for the current workspace.", "tags": [ - "threads" + "integrations" ], - "summary": "Query Threads", + "summary": "Update Agent Builder integrations settings", "parameters": [], "responses": { "200": { - "description": "items and pagination", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.QueryThreadsResponseBody" + "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsPayload" } } } }, "400": { - "description": "bad request (malformed JSON or invalid parameters)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "401": { - "description": "missing or invalid authentication", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "403": { - "description": "forbidden (insufficient permission)", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "session not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "422": { - "description": "unprocessable entity (e.g. invalid project UUID)", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "503": { - "description": "service unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } - }, - "504": { - "description": "gateway timeout or deadline exceeded", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39738,666 +42244,523 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.QueryThreadsRequestBody" + "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsUpdatePayload" } } } } } }, - "/v2/threads/{thread_id}/stats": { + "/v1/fleet/orgs": { "get": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], - "Tenant ID": [] + "Bearer Auth": [] } ], - "description": "**Alpha:** The request and response contract may change;\nCompute aggregate stats for a single thread (turn count, latency percentiles, token/cost sums, and detail breakdowns) within a project.", + "description": "Returns the organizations the authenticated caller belongs to. This endpoint does not require X-Tenant-Id and is the entry point for Fleet bootstrap: take an organization's `id` and list its workspaces via GET /v1/fleet/orgs/{org_id}/tenants, then call workspace-scoped endpoints with that tenant's id in X-Tenant-Id.", "tags": [ - "threads" + "fleet orgs" ], - "summary": "Query Single Thread Stats", + "summary": "List organizations", "parameters": [ { - "description": "Thread ID", - "name": "thread_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "`filter` narrows which of the thread's traces are aggregated, using a LangSmith filter expression. For example: lt(start_time, \"2025-01-01T00:00:00Z\") or eq(trace_id, \"0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", - "name": "filter", - "in": "query", - "schema": { - "type": "string", - "title": "Filter" - } - }, - { - "example": [ - "TURNS", - "LATENCY_P50" - ], - "description": "`selects` lists which aggregate stats to compute and return (repeatable query parameter). At least one value is required. Accepts any value of `SingleThreadStatsSelectField`.", - "name": "selects", + "description": "Items per page (default 20, max 20)", + "name": "page_size", "in": "query", - "required": true, - "style": "form", - "explode": true, "schema": { - "items": { - "enum": [ - "TURNS", - "FIRST_START_TIME", - "LAST_START_TIME", - "LAST_END_TIME", - "LATENCY_P50", - "LATENCY_P99", - "PROMPT_TOKENS", - "PROMPT_COST", - "COMPLETION_TOKENS", - "COMPLETION_COST", - "TOTAL_TOKENS", - "TOTAL_COST", - "PROMPT_TOKEN_DETAILS", - "COMPLETION_TOKEN_DETAILS", - "PROMPT_COST_DETAILS", - "COMPLETION_COST_DETAILS", - "FEEDBACK_STATS" - ], - "type": "string" - }, - "type": "array", - "title": "Selects" + "type": "integer", + "title": "Page Size" } }, { - "description": "`session_id` is the tracing project (session) UUID (required).", - "name": "session_id", + "description": "Opaque pagination cursor returned by a prior response", + "name": "cursor", "in": "query", - "required": true, "schema": { "type": "string", - "format": "uuid", - "title": "Session Id" + "title": "Cursor" } } ], "responses": { "200": { - "description": "aggregate stats for the thread", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.QuerySingleThreadStatsResponseBody" + "$ref": "#/components/schemas/orgs.ListOrgsResponse" } } } }, "400": { - "description": "bad request (missing or invalid query parameters)", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } }, "401": { - "description": "missing or invalid authentication", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } }, - "403": { - "description": "forbidden (insufficient permission)", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } + } + }, + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/orgs/{org_id}/tenants": { + "get": { + "security": [ + { + "API Key": [] }, - "404": { - "description": "session not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } + { + "Bearer Auth": [] + } + ], + "description": "Returns the LangSmith tenants/workspaces visible to the authenticated caller in the requested organization. This endpoint does not require X-Tenant-Id and is intended for Fleet bootstrap.", + "tags": [ + "fleet tenants" + ], + "summary": "List tenants", + "parameters": [ + { + "description": "Organization ID", + "name": "org_id", + "in": "path", + "required": true, + "schema": { + "type": "string" } }, - "422": { - "description": "unprocessable entity (e.g. invalid project UUID)", + { + "description": "Items per page (default 20, max 20)", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "title": "Page Size" + } + }, + { + "description": "Opaque pagination cursor returned by a prior response", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/tenants.ListTenantsResponse" } } } }, - "500": { - "description": "internal server error", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/tenants.ErrorResponse" } } } }, - "503": { - "description": "service unavailable", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/tenants.ErrorResponse" } } } }, - "504": { - "description": "gateway timeout or deadline exceeded", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/tenants.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "x-hidden": true } }, - "/v2/threads/{thread_id}/traces": { + "/v1/fleet/secrets": { "get": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], "Tenant ID": [] - } - ], - "description": "**Alpha:** The request and response contract may change;\nRetrieve all traces belonging to a specific thread within a project.", - "tags": [ - "threads" - ], - "summary": "Query Thread Traces", - "parameters": [ - { - "description": "Thread ID", - "name": "thread_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "`cursor` is the opaque string from a previous response's `next_cursor`. Omit on the first request; pass the returned cursor to fetch the next page.", - "name": "cursor", - "in": "query", - "schema": { - "type": "string", - "title": "Cursor" - } - }, - { - "description": "`filter` narrows which traces are returned for this thread, using a LangSmith filter expression evaluated against each root trace run.\nFor example: eq(status, \"success\") or has(tags, \"production\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", - "name": "filter", - "in": "query", - "schema": { - "type": "string", - "title": "Filter" - } }, { - "example": 20, - "description": "`page_size` is the maximum number of traces to return in this response. Defaults to 20 when omitted; must be between 1 and 100 inclusive when set.", + "Bearer Auth": [] + } + ], + "description": "Lists the names of secrets configured for the workspace. Use this to check which model API keys (see a model's required_secrets) are already set. Secret values are never returned. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", + "tags": [ + "fleet secrets" + ], + "summary": "List workspace secret names", + "parameters": [ + { + "description": "Items per page (1-100, default 20)", "name": "page_size", "in": "query", "schema": { - "minimum": 1, "type": "integer", - "maximum": 100, - "default": 20, "title": "Page Size" } }, { - "description": "`project_id` is the tracing project UUID (required).", - "name": "project_id", + "description": "Opaque pagination cursor from a prior response's next_cursor", + "name": "cursor", "in": "query", - "required": true, "schema": { "type": "string", - "format": "uuid", - "title": "Project Id" - } - }, - { - "example": [ - "NAME", - "START_TIME" - ], - "description": "`selects` lists which properties to include on each returned trace (repeatable query parameter). Accepts any value of the `ThreadTraceSelectField` enum. Properties not listed are omitted from each trace object; `trace_id` is always returned.", - "name": "selects", - "in": "query", - "style": "form", - "explode": true, - "schema": { - "items": { - "enum": [ - "THREAD_ID", - "TRACE_ID", - "OP", - "PROMPT_TOKENS", - "COMPLETION_TOKENS", - "TOTAL_TOKENS", - "START_TIME", - "END_TIME", - "LATENCY", - "FIRST_TOKEN_TIME", - "INPUTS_PREVIEW", - "OUTPUTS_PREVIEW", - "PROMPT_COST", - "COMPLETION_COST", - "TOTAL_COST", - "PROMPT_TOKEN_DETAILS", - "COMPLETION_TOKEN_DETAILS", - "PROMPT_COST_DETAILS", - "COMPLETION_COST_DETAILS", - "NAME", - "ERROR_PREVIEW" - ], - "type": "string" - }, - "type": "array", - "title": "Selects" + "title": "Cursor" } } ], "responses": { "200": { - "description": "items and pagination", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.QueryThreadTracesResponseBody" + "$ref": "#/components/schemas/secrets.ListResponse" } } } }, "400": { - "description": "bad request (missing or invalid query parameters)", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, "401": { - "description": "missing or invalid authentication", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, "403": { - "description": "forbidden (insufficient permission)", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "404": { - "description": "session not found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } + } + }, + "x-public": true, + "x-hidden": true + }, + "post": { + "security": [ + { + "API Key": [] }, - "422": { - "description": "unprocessable entity (e.g. invalid project UUID)", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Sets or deletes multiple workspace secrets in one request, mirroring the upstream SecretUpsert contract. A null value deletes the key; a non-null value sets it. Values are never returned. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", + "tags": [ + "fleet secrets" + ], + "summary": "Bulk set or delete workspace secrets", + "parameters": [], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "500": { - "description": "internal server error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "503": { - "description": "service unavailable", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } - }, - "504": { - "description": "gateway timeout or deadline exceeded", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/secrets.bulkUpsertItem" } } } } }, - "x-public": true + "x-hidden": true } }, - "/v2/traces/query": { - "post": { + "/v1/fleet/secrets/{name}": { + "put": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], - "description": "Returns a paginated list of traces (root runs) for a single tracing project. Each item carries the trace's root run plus optional trace-wide aggregates (`total_tokens`, `total_cost`, `first_token_time`) under `trace_aggregates`, so clients never have to merge by `trace_id`.\n\nTraces are scanned within a `start_time` window: `min_start_time` defaults to 24 hours before the request, `max_start_time` defaults to the request time. Set either explicitly to widen or narrow the window.\n\nSupports filters (`trace_filter`, `tree_filter`), cursor pagination (`cursor`), and field projection (`selects`).", + "description": "Creates or updates a single workspace secret by name. The value is write-only and is never returned by any endpoint. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", "tags": [ - "runs" + "fleet secrets" ], - "summary": "Query traces", + "summary": "Set a workspace secret", "parameters": [ { - "description": "application/json (required for JSON body)", - "name": "Content-Type", - "in": "header", + "description": "Secret name (e.g. ANTHROPIC_API_KEY)", + "name": "name", + "in": "path", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/query.QueryTracesResponseBody" - } - } - } + "204": { + "description": "No Content" }, "400": { - "description": "bad request (malformed JSON or invalid parameters)", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, "401": { - "description": "missing or invalid authentication", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, "403": { - "description": "forbidden (insufficient permission)", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } - }, - "404": { - "description": "session not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/secrets.putRequest" } } + } + }, + "x-hidden": true + }, + "delete": { + "security": [ + { + "API Key": [] }, - "422": { - "description": "unprocessable entity (e.g. invalid UUID)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Removes a single workspace secret by name. Succeeds whether or not the secret currently exists. Secrets are a single shared namespace per workspace. Any agent (triggered by any member) can use them, and any member whose role grants workspaces:manage-secrets (Workspace Admins by default) can overwrite or delete them. Setting an existing name replaces its value for everyone. Treat them as shared team credentials, not personal keys.", + "tags": [ + "fleet secrets" + ], + "summary": "Delete a workspace secret", + "parameters": [ + { + "description": "Secret name (e.g. ANTHROPIC_API_KEY)", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, - "500": { - "description": "internal server error", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "503": { - "description": "service unavailable", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "504": { - "description": "gateway timeout or deadline exceeded", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/query.QueryTracesRequestBody" - } - } - } - } + "x-hidden": true } }, - "/v2/traces/{trace_id}/runs": { + "/v1/fleet/tenants/{tenant_id}/users/{id}": { "get": { "security": [ { - "API Key": [], - "Tenant ID": [] + "API Key": [] }, { - "Bearer Auth": [], - "Tenant ID": [] + "Bearer Auth": [] } ], - "description": "**Alpha:** The request and response contract may change;\nReturns runs for a trace ID within min/max start time. Optional `filter`; repeatable `selects` to select fields to return.", + "description": "Resolves a LangSmith user by ID within a tenant/workspace the caller can access. This endpoint does not require X-Tenant-Id because the tenant is part of the path.", "tags": [ - "runs" + "fleet users" ], - "summary": "List runs in a trace", + "summary": "Get Fleet user in tenant", "parameters": [ { - "description": "application/json", - "name": "Accept", - "in": "header", - "schema": { - "type": "string" - } - }, - { - "description": "Trace UUID", - "name": "trace_id", + "description": "Tenant ID", + "name": "tenant_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "description": "`filter` narrows which runs within this trace are returned, using a LangSmith filter expression evaluated against each run. For example: `eq(run_type, \"llm\")` for LLM runs only, or `eq(status, \"error\")` for failed runs.\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", - "name": "filter", - "in": "query", - "schema": { - "type": "string", - "title": "Filter" - } - }, - { - "description": "`max_start_time` is the optional inclusive upper bound for run `start_time` (RFC3339 date-time). Required together with `min_start_time`.", - "name": "max_start_time", - "in": "query", - "schema": { - "type": "string", - "format": "date-time", - "title": "Max Start Time" - } - }, - { - "description": "`min_start_time` is the optional inclusive lower bound for run `start_time` (RFC3339 date-time). Required together with `max_start_time`.", - "name": "min_start_time", - "in": "query", - "schema": { - "type": "string", - "format": "date-time", - "title": "Min Start Time" + "type": "string" } }, { - "description": "`project_id` is the UUID of the tracing project that owns the trace.", - "name": "project_id", - "in": "query", + "description": "User ID", + "name": "id", + "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid", - "title": "Project Id" - } - }, - { - "description": "`selects` lists which properties to include on each returned run (repeatable query parameter). Accepts any value of the `RunSelectField` enum. If omitted, only `id` is returned.", - "name": "selects", - "in": "query", - "style": "form", - "explode": true, - "schema": { - "items": { - "enum": [ - "ID", - "NAME", - "RUN_TYPE", - "STATUS", - "START_TIME", - "END_TIME", - "LATENCY_SECONDS", - "FIRST_TOKEN_TIME", - "ERROR", - "ERROR_PREVIEW", - "EXTRA", - "METADATA", - "EVENTS", - "INPUTS", - "INPUTS_PREVIEW", - "OUTPUTS", - "OUTPUTS_PREVIEW", - "MANIFEST", - "PARENT_RUN_IDS", - "PROJECT_ID", - "TRACE_ID", - "THREAD_ID", - "DOTTED_ORDER", - "IS_ROOT", - "REFERENCE_EXAMPLE_ID", - "REFERENCE_DATASET_ID", - "TOTAL_TOKENS", - "PROMPT_TOKENS", - "COMPLETION_TOKENS", - "TOTAL_COST", - "PROMPT_COST", - "COMPLETION_COST", - "PROMPT_TOKEN_DETAILS", - "COMPLETION_TOKEN_DETAILS", - "PROMPT_COST_DETAILS", - "COMPLETION_COST_DETAILS", - "PRICE_MODEL_ID", - "TAGS", - "APP_PATH", - "ATTACHMENTS", - "THREAD_EVALUATION_TIME", - "IS_IN_DATASET", - "SHARE_URL", - "FEEDBACK_STATS" - ], - "type": "string" - }, - "type": "array", - "title": "Selects" + "type": "string" } } ], @@ -40407,93 +42770,126 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.QueryTraceResponseBody" + "$ref": "#/components/schemas/users.UserRef" } } } }, "400": { - "description": "bad request (missing or invalid query parameters)", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.ErrorResponse" } } } }, "401": { - "description": "missing or invalid authentication", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.ErrorResponse" } } } }, "403": { - "description": "forbidden (insufficient permission)", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.ErrorResponse" } } } }, "404": { - "description": "session not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.ErrorResponse" } } } }, - "422": { - "description": "unprocessable entity (e.g. invalid UUID)", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.ErrorResponse" } } } + } + }, + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/users/current": { + "get": { + "security": [ + { + "API Key": [] }, - "500": { - "description": "internal server error", + { + "Bearer Auth": [] + } + ], + "description": "Returns the authenticated Fleet caller's user profile. This endpoint does not require X-Tenant-Id and is intended for Fleet bootstrap.", + "tags": [ + "fleet users" + ], + "summary": "Get current Fleet user", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.User" } } } }, - "503": { - "description": "service unavailable", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.ErrorResponse" } } } }, - "504": { - "description": "gateway timeout or deadline exceeded", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/users.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/users.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "parameters": [], + "x-hidden": true } }, "/workspaces/current/ttl-settings": { @@ -42779,6 +45175,7 @@ "update_workspace_pending_member", "update_workspace_secrets", "delete_workspace_secret", + "update_org_secrets", "unshare_entities", "set_tenant_handle", "create_tag_key", @@ -42794,6 +45191,7 @@ "delete_tracer_sessions", "delete_runs", "share_run", + "unshare_run", "create_dataset", "create_csv_dataset", "create_experiment_via_upload", @@ -42852,7 +45250,9 @@ "delete_access_policy", "list_access_policies", "read_access_policy", + "update_access_policy", "attach_access_policies", + "detach_access_policies", "read_role_access_policies", "create_scim_token", "update_scim_token", @@ -42882,6 +45282,10 @@ "trigger_forge_configuration", "add_annotation_queue_reviewer", "remove_annotation_queue_reviewer", + "add_items_to_annotation_queue", + "delete_annotation_queue_item", + "update_annotation_queue_item", + "get_annotation_queue_items", "submit_nps_response", "create_mcp_server", "update_mcp_server", @@ -42916,6 +45320,7 @@ "update_gateway_policy", "delete_gateway_policy", "invoke_gateway", + "purchase_prepaid_gateway_provider_credits", "create_sandbox_proxy_profile", "update_sandbox_proxy_profile", "delete_sandbox_proxy_profile", @@ -42943,6 +45348,7 @@ "update_sandbox_registry", "delete_sandbox_registry", "create_data_plane", + "delete_data_plane", "create_annotation_queue", "populate_annotation_queue", "delete_annotation_queue", @@ -42954,6 +45360,7 @@ "delete_annotation_queue_run", "delete_annotation_queue_runs", "create_annotation_queue_run_status", + "create_annotation_queue_item_status", "login", "send_sso_email_confirmation", "confirm_sso_user_email", @@ -43086,8 +45493,10 @@ "stream_feedback_delta", "read_comparative_experiments", "stream_grouped_experiments", + "get_run_url", "query_run", "query_runs", + "batch_query_runs", "query_trace", "query_traces", "query_trace_messages", @@ -43115,10 +45524,16 @@ "get_self_hosted_customer", "get_provisioned_saas_org", "update_provisioned_saas_org", + "create_oauth_client", + "update_oauth_client", + "delete_oauth_client", + "rotate_oauth_client_secret", + "revoke_oauth_grant", "test_op_generic" ], "title": "AuditLogOperation", - "description": "Operations that are logged in audit_logs database table." + "description": "Operations that are logged in audit_logs database table.", + "x-extensible-enum": true }, "AuthProvider": { "type": "string", @@ -43307,43 +45722,6 @@ "type": "object", "title": "BasicAuthUserPatch" }, - "BatchIngestConfig": { - "properties": { - "use_multipart_endpoint": { - "type": "boolean", - "title": "Use Multipart Endpoint", - "default": true - }, - "scale_up_qsize_trigger": { - "type": "integer", - "title": "Scale Up Qsize Trigger", - "default": 1000 - }, - "scale_up_nthreads_limit": { - "type": "integer", - "title": "Scale Up Nthreads Limit", - "default": 16 - }, - "scale_down_nempty_trigger": { - "type": "integer", - "title": "Scale Down Nempty Trigger", - "default": 4 - }, - "size_limit": { - "type": "integer", - "title": "Size Limit", - "default": 100 - }, - "size_limit_bytes": { - "type": "integer", - "title": "Size Limit Bytes", - "default": 20971520 - } - }, - "type": "object", - "title": "BatchIngestConfig", - "description": "Batch ingest config." - }, "BodyParamsForRunSchema": { "properties": { "id": { @@ -45177,14 +47555,17 @@ "disabled", "developer", "developer_01_2026", + "developer_07_2026", "plus", "plus_01_2026", "plus_07_2026", "startup", "startup_v0", + "startup_07_2026", "partner", "premier", - "free" + "free", + "free_07_2026" ], "title": "ChangePaymentPlanReq", "description": "Enum for payment plans that the user can change to. Developer plans are permanent and enterprise plans will be changed manually." @@ -46450,7 +48831,16 @@ "title": "Index" }, "chart_type": { - "$ref": "#/components/schemas/CustomChartType" + "type": "string", + "enum": [ + "line", + "bar", + "table", + "kpi", + "top-k", + "pie" + ], + "title": "Chart Type" }, "series": { "items": { @@ -46528,6 +48918,169 @@ ], "title": "CustomChartCreatePreview" }, + "CustomChartFeedbackCountMetric": { + "properties": { + "type": { + "type": "string", + "const": "count", + "title": "Type", + "default": "count" + }, + "entity": { + "type": "string", + "const": "feedback", + "title": "Entity" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + }, + "params": { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetricParams" + } + }, + "type": "object", + "required": [ + "entity", + "params" + ], + "title": "CustomChartFeedbackCountMetric" + }, + "CustomChartFeedbackCountMetricParams": { + "properties": { + "feedback_key": { + "type": "string", + "title": "Feedback Key" + } + }, + "type": "object", + "required": [ + "feedback_key" + ], + "title": "CustomChartFeedbackCountMetricParams" + }, + "CustomChartFeedbackScoreMetricPercentile": { + "properties": { + "type": { + "type": "string", + "const": "percentile", + "title": "Type" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + }, + "field": { + "type": "string", + "const": "feedback_score", + "title": "Field" + }, + "params": { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentileParams" + } + }, + "type": "object", + "required": [ + "type", + "field", + "params" + ], + "title": "CustomChartFeedbackScoreMetricPercentile" + }, + "CustomChartFeedbackScoreMetricPercentileParams": { + "properties": { + "p": { + "type": "number", + "maximum": 1.0, + "minimum": 0.0, + "title": "P" + }, + "feedback_key": { + "type": "string", + "title": "Feedback Key" + } + }, + "type": "object", + "required": [ + "p", + "feedback_key" + ], + "title": "CustomChartFeedbackScoreMetricPercentileParams" + }, + "CustomChartFeedbackScoreMetricScalar": { + "properties": { + "type": { + "anyOf": [ + { + "type": "string", + "const": "max" + }, + { + "type": "string", + "const": "min" + }, + { + "type": "string", + "const": "avg" + } + ], + "title": "Type" + }, + "field": { + "type": "string", + "const": "feedback_score", + "title": "Field" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + }, + "params": { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalarParams" + } + }, + "type": "object", + "required": [ + "type", + "field", + "params" + ], + "title": "CustomChartFeedbackScoreMetricScalar" + }, + "CustomChartFeedbackScoreMetricScalarParams": { + "properties": { + "feedback_key": { + "type": "string", + "title": "Feedback Key" + } + }, + "type": "object", + "required": [ + "feedback_key" + ], + "title": "CustomChartFeedbackScoreMetricScalarParams" + }, "CustomChartFilterByDataset": { "properties": { "source_type": { @@ -46733,7 +49286,8 @@ "completion_tokens", "total_cost", "prompt_cost", - "completion_cost" + "completion_cost", + "feedback_score" ], "title": "CustomChartMetricField" }, @@ -46794,12 +49348,21 @@ }, "numerator": { "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, { "$ref": "#/components/schemas/CustomChartMetricPercentile" } @@ -46808,12 +49371,21 @@ }, "denominator": { "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, { "$ref": "#/components/schemas/CustomChartMetricPercentile" } @@ -46838,12 +49410,21 @@ }, "numerator": { "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, { "$ref": "#/components/schemas/CustomChartMetricPercentile" } @@ -46852,12 +49433,21 @@ }, "denominator": { "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, { "$ref": "#/components/schemas/CustomChartMetricPercentile" } @@ -46961,7 +49551,16 @@ "title": "Index" }, "chart_type": { - "$ref": "#/components/schemas/CustomChartType" + "type": "string", + "enum": [ + "line", + "bar", + "table", + "kpi", + "top-k", + "pie" + ], + "title": "Chart Type" }, "section_id": { "type": "string", @@ -47012,6 +49611,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -47067,12 +49678,21 @@ }, "metric_definition": { "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, { "$ref": "#/components/schemas/CustomChartMetricPercentile" }, @@ -47156,6 +49776,183 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "filters": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartSeriesFilters" + }, + { + "type": "null" + } + ] + }, + "metric": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartMetric" + }, + { + "type": "null" + } + ] + }, + "project_metric": { + "anyOf": [ + { + "$ref": "#/components/schemas/HostProjectChartMetric" + }, + { + "type": "null" + } + ] + }, + "feedback_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Feedback Key" + }, + "workspace_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Workspace Id" + }, + "metric_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-Output" + }, + { + "type": "null" + } + ], + "title": "Metric Definition" + }, + "group_by_definitions": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartGroupByPlain" + }, + { + "$ref": "#/components/schemas/CustomChartGroupByComplex" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Group By Definitions" + }, + "filter_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFilterByTracingProject" + }, + { + "$ref": "#/components/schemas/CustomChartFilterByDataset" + }, + { + "type": "null" + } + ], + "title": "Filter Definition" + }, + "id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "string" + } + ], + "title": "Id" + }, + "group_by": { + "anyOf": [ + { + "$ref": "#/components/schemas/RunStatsGroupBySeriesResponse" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "name", + "id" + ], + "title": "CustomChartSeries" + }, + "CustomChartSeriesCreate": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -47212,154 +50009,19 @@ "metric_definition": { "anyOf": [ { - "$ref": "#/components/schemas/CustomChartMetricCount" - }, - { - "$ref": "#/components/schemas/CustomChartMetricScalar" - }, - { - "$ref": "#/components/schemas/CustomChartMetricPercentile" - }, - { - "$ref": "#/components/schemas/CustomChartMetricRatio-Output" - }, - { - "type": "null" - } - ], - "title": "Metric Definition" - }, - "group_by_definitions": { - "anyOf": [ - { - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/CustomChartGroupByPlain" - }, - { - "$ref": "#/components/schemas/CustomChartGroupByComplex" - } - ] - }, - "type": "array" - }, - { - "type": "null" - } - ], - "title": "Group By Definitions" - }, - "filter_definition": { - "anyOf": [ - { - "$ref": "#/components/schemas/CustomChartFilterByTracingProject" - }, - { - "$ref": "#/components/schemas/CustomChartFilterByDataset" - }, - { - "type": "null" - } - ], - "title": "Filter Definition" - }, - "id": { - "anyOf": [ - { - "type": "string", - "format": "uuid" - }, - { - "type": "string" - } - ], - "title": "Id" - }, - "group_by": { - "anyOf": [ - { - "$ref": "#/components/schemas/RunStatsGroupBySeriesResponse" + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" }, { - "type": "null" - } - ] - } - }, - "type": "object", - "required": [ - "name", - "id" - ], - "title": "CustomChartSeries" - }, - "CustomChartSeriesCreate": { - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "filters": { - "anyOf": [ - { - "$ref": "#/components/schemas/CustomChartSeriesFilters" - }, - { - "type": "null" - } - ] - }, - "metric": { - "anyOf": [ - { - "$ref": "#/components/schemas/CustomChartMetric" - }, - { - "type": "null" - } - ] - }, - "project_metric": { - "anyOf": [ - { - "$ref": "#/components/schemas/HostProjectChartMetric" - }, - { - "type": "null" - } - ] - }, - "feedback_key": { - "anyOf": [ - { - "type": "string" + "$ref": "#/components/schemas/CustomChartMetricCount" }, { - "type": "null" - } - ], - "title": "Feedback Key" - }, - "workspace_id": { - "anyOf": [ - { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" }, { - "type": "null" - } - ], - "title": "Workspace Id" - }, - "metric_definition": { - "anyOf": [ - { - "$ref": "#/components/schemas/CustomChartMetricCount" + "$ref": "#/components/schemas/CustomChartMetricScalar" }, { - "$ref": "#/components/schemas/CustomChartMetricScalar" + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" }, { "$ref": "#/components/schemas/CustomChartMetricPercentile" @@ -47485,6 +50147,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -47540,12 +50214,21 @@ }, "metric_definition": { "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, { "$ref": "#/components/schemas/CustomChartMetricPercentile" }, @@ -47622,6 +50305,77 @@ ], "title": "CustomChartSeriesUpdate" }, + "CustomChartSeriesV2Equivalent": { + "properties": { + "metric_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-Output" + }, + { + "type": "null" + } + ], + "title": "Metric Definition" + }, + "group_by_definitions": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartGroupByPlain" + }, + { + "$ref": "#/components/schemas/CustomChartGroupByComplex" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Group By Definitions" + }, + "filter_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFilterByTracingProject" + }, + { + "$ref": "#/components/schemas/CustomChartFilterByDataset" + }, + { + "type": "null" + } + ], + "title": "Filter Definition" + } + }, + "type": "object", + "title": "CustomChartSeriesV2Equivalent", + "description": "A V1 series' translated V2 equivalent, for display only — does not\nmean the series itself has been migrated.\n\nKept separate from metric_definition/group_by_definitions/\nfilter_definition, since merging would violate CustomChartSeriesBase's\nexactly-one-of-metric-or-metric_definition invariant for V1 series." + }, "CustomChartType": { "type": "string", "enum": [ @@ -47630,7 +50384,8 @@ "table", "kpi", "top-k", - "pie" + "pie", + "text" ], "title": "CustomChartType", "description": "Enum for custom chart types." @@ -47764,6 +50519,20 @@ "default": { "__missing__": "__missing__" } + }, + "markdown": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/Missing" + } + ], + "title": "Markdown", + "default": { + "__missing__": "__missing__" + } } }, "type": "object", @@ -48010,7 +50779,26 @@ }, "charts": { "items": { - "$ref": "#/components/schemas/SingleCustomChartResponse" + "oneOf": [ + { + "$ref": "#/components/schemas/SingleCustomChartResponse" + }, + { + "$ref": "#/components/schemas/CustomTextBlock" + } + ], + "discriminator": { + "propertyName": "chart_type", + "mapping": { + "bar": "#/components/schemas/SingleCustomChartResponse", + "kpi": "#/components/schemas/SingleCustomChartResponse", + "line": "#/components/schemas/SingleCustomChartResponse", + "pie": "#/components/schemas/SingleCustomChartResponse", + "table": "#/components/schemas/SingleCustomChartResponse", + "text": "#/components/schemas/CustomTextBlock", + "top-k": "#/components/schemas/SingleCustomChartResponse" + } + } }, "type": "array", "title": "Charts" @@ -48028,6 +50816,16 @@ } ], "title": "Sub Sections" + }, + "layout": { + "anyOf": [ + { + "$ref": "#/components/schemas/DashboardLayout-Output" + }, + { + "type": "null" + } + ] } }, "type": "object", @@ -48253,6 +51051,23 @@ "default": { "__missing__": "__missing__" } + }, + "layout": { + "anyOf": [ + { + "$ref": "#/components/schemas/DashboardLayout-Input" + }, + { + "$ref": "#/components/schemas/Missing" + }, + { + "type": "null" + } + ], + "title": "Layout", + "default": { + "__missing__": "__missing__" + } } }, "type": "object", @@ -48288,24 +51103,146 @@ "type": "object", "title": "CustomChartsSectionsCloneRequest" }, - "CustomerInfo": { + "CustomTextBlock": { "properties": { - "customer_id": { + "id": { "type": "string", - "title": "Customer Id" + "format": "uuid", + "title": "Id" }, - "customer_name": { + "chart_type": { + "type": "string", + "const": "text", + "title": "Chart Type" + }, + "markdown": { "type": "string", - "title": "Customer Name" + "title": "Markdown" + }, + "index": { + "type": "integer", + "title": "Index" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" } }, "type": "object", "required": [ - "customer_id", - "customer_name" + "id", + "chart_type", + "markdown", + "index" ], - "title": "CustomerInfo", - "description": "Customer info." + "title": "CustomTextBlock" + }, + "CustomTextBlockCreate": { + "properties": { + "index": { + "anyOf": [ + { + "type": "integer", + "maximum": 100.0, + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Index" + }, + "chart_type": { + "type": "string", + "const": "text", + "title": "Chart Type" + }, + "section_id": { + "type": "string", + "format": "uuid", + "title": "Section Id" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "markdown": { + "type": "string", + "title": "Markdown" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "chart_type", + "section_id", + "markdown" + ], + "title": "CustomTextBlockCreate" + }, + "CustomTextBlockResponse": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "chart_type": { + "type": "string", + "const": "text", + "title": "Chart Type" + }, + "markdown": { + "type": "string", + "title": "Markdown" + }, + "index": { + "type": "integer", + "title": "Index" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "section_id": { + "type": "string", + "format": "uuid", + "title": "Section Id" + } + }, + "type": "object", + "required": [ + "id", + "chart_type", + "markdown", + "index", + "section_id" + ], + "title": "CustomTextBlockResponse" }, "CustomerVisiblePlanInfo": { "properties": { @@ -48338,6 +51275,148 @@ "title": "CustomerVisiblePlanInfo", "description": "Customer visible plan information." }, + "DashboardBreakpointLayout-Input": { + "properties": { + "rows": { + "items": { + "$ref": "#/components/schemas/DashboardLayoutRow" + }, + "type": "array", + "title": "Rows" + } + }, + "type": "object", + "required": [ + "rows" + ], + "title": "DashboardBreakpointLayout" + }, + "DashboardBreakpointLayout-Output": { + "properties": { + "rows": { + "items": { + "$ref": "#/components/schemas/DashboardLayoutRow" + }, + "type": "array", + "title": "Rows" + } + }, + "type": "object", + "required": [ + "rows" + ], + "title": "DashboardBreakpointLayout" + }, + "DashboardLayout-Input": { + "properties": { + "version": { + "type": "integer", + "const": 1, + "title": "Version" + }, + "breakpoints": { + "$ref": "#/components/schemas/DashboardLayoutBreakpoints-Input" + } + }, + "type": "object", + "required": [ + "version", + "breakpoints" + ], + "title": "DashboardLayout" + }, + "DashboardLayout-Output": { + "properties": { + "version": { + "type": "integer", + "const": 1, + "title": "Version" + }, + "breakpoints": { + "$ref": "#/components/schemas/DashboardLayoutBreakpoints-Output" + } + }, + "type": "object", + "required": [ + "version", + "breakpoints" + ], + "title": "DashboardLayout" + }, + "DashboardLayoutBreakpoints-Input": { + "properties": { + "sm": { + "$ref": "#/components/schemas/DashboardBreakpointLayout-Input" + }, + "md": { + "$ref": "#/components/schemas/DashboardBreakpointLayout-Input" + } + }, + "type": "object", + "required": [ + "sm", + "md" + ], + "title": "DashboardLayoutBreakpoints" + }, + "DashboardLayoutBreakpoints-Output": { + "properties": { + "sm": { + "$ref": "#/components/schemas/DashboardBreakpointLayout-Output" + }, + "md": { + "$ref": "#/components/schemas/DashboardBreakpointLayout-Output" + } + }, + "type": "object", + "required": [ + "sm", + "md" + ], + "title": "DashboardLayoutBreakpoints" + }, + "DashboardLayoutItem": { + "properties": { + "chart_id": { + "type": "string", + "format": "uuid", + "title": "Chart Id" + }, + "width_units": { + "type": "integer", + "minimum": 20.0, + "title": "Width Units" + } + }, + "type": "object", + "required": [ + "chart_id", + "width_units" + ], + "title": "DashboardLayoutItem" + }, + "DashboardLayoutRow": { + "properties": { + "height_units": { + "type": "integer", + "title": "Height Units" + }, + "items": { + "items": { + "$ref": "#/components/schemas/DashboardLayoutItem" + }, + "type": "array", + "minItems": 1, + "title": "Items" + } + }, + "type": "object", + "required": [ + "height_units", + "items" + ], + "title": "DashboardLayoutRow" + }, "DataType": { "type": "string", "enum": [ @@ -49560,7 +52639,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -49683,7 +52763,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -49694,7 +52775,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -50927,7 +54009,8 @@ "type": "null" } ], - "title": "Session Id" + "title": "Session Id", + "description": "Required. The ID of the tracing project (session) the feedback belongs to." }, "trace_id": { "anyOf": [ @@ -50953,6 +54036,17 @@ ], "title": "Start Time" }, + "feedback_thread_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Feedback Thread Id" + }, "extend_trace_retention": { "type": "boolean", "title": "Extend Trace Retention", @@ -53232,7 +56326,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -53243,7 +56338,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -53254,7 +56350,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -53548,7 +56645,8 @@ "lg_run_count", "responses_per_second", "error_responses_per_second", - "p95_latency" + "p95_latency", + "run_queue_wait_time" ], "title": "HostProjectChartMetric", "description": "LGP Metrics you can chart." @@ -53901,69 +56999,6 @@ ], "title": "IdentityPatch" }, - "InfoGetResponse": { - "properties": { - "version": { - "type": "string", - "title": "Version" - }, - "git_sha": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Git Sha" - }, - "license_expiration_time": { - "anyOf": [ - { - "type": "string", - "format": "date-time" - }, - { - "type": "null" - } - ], - "title": "License Expiration Time" - }, - "batch_ingest_config": { - "$ref": "#/components/schemas/BatchIngestConfig", - "default": { - "use_multipart_endpoint": true, - "scale_up_qsize_trigger": 1000, - "scale_up_nthreads_limit": 16, - "scale_down_nempty_trigger": 4, - "size_limit": 100, - "size_limit_bytes": 20971520 - } - }, - "instance_flags": { - "additionalProperties": true, - "type": "object", - "title": "Instance Flags" - }, - "customer_info": { - "anyOf": [ - { - "$ref": "#/components/schemas/CustomerInfo" - }, - { - "type": "null" - } - ] - } - }, - "type": "object", - "required": [ - "version" - ], - "title": "InfoGetResponse", - "description": "The LangSmith server info." - }, "InputTokenDetails": { "properties": { "audio": { @@ -53979,6 +57014,7 @@ "title": "Cache Read" } }, + "additionalProperties": true, "type": "object", "title": "InputTokenDetails", "description": "Breakdown of input token counts.\n\nDoes *not* need to sum to full input token count. Does *not* need to have all keys.\n\nExample:\n ```python\n {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n }\n ```\n\nMay also hold extra provider-specific keys.\n\n!!! version-added \"Added in `langchain-core` 0.3.9\"" @@ -54120,6 +57156,7 @@ "title": "Extras" } }, + "additionalProperties": true, "type": "object", "required": [ "type", @@ -54716,7 +57753,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Prompt Cost" @@ -54727,7 +57765,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Completion Cost" @@ -54741,7 +57780,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -54762,7 +57802,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -54796,6 +57837,121 @@ "title": "ModelPriceMapCreateSchema", "description": "Model price map create schema." }, + "ModelPriceMapSchema": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Start Time" + }, + "tenant_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Tenant Id" + }, + "match_path": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Match Path", + "default": [ + "model", + "model_name", + "model_id", + "model_path", + "endpoint_name" + ] + }, + "match_pattern": { + "type": "string", + "title": "Match Pattern" + }, + "prompt_cost": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", + "title": "Prompt Cost" + }, + "completion_cost": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", + "title": "Completion Cost" + }, + "prompt_cost_details": { + "anyOf": [ + { + "additionalProperties": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Prompt Cost Details" + }, + "completion_cost_details": { + "anyOf": [ + { + "additionalProperties": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Completion Cost Details" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Provider" + } + }, + "type": "object", + "required": [ + "name", + "match_pattern", + "prompt_cost", + "completion_cost" + ], + "title": "ModelPriceMapSchema", + "description": "Model price map schema." + }, "ModelPriceMapUpdateSchema": { "properties": { "name": { @@ -54838,7 +57994,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Prompt Cost" @@ -54849,7 +58006,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Completion Cost" @@ -54863,7 +58021,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -54884,7 +58043,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -54947,8 +58107,7 @@ "OCSFApi": { "properties": { "operation": { - "$ref": "#/components/schemas/AuditLogOperation", - "x-extensible-enum": true + "$ref": "#/components/schemas/AuditLogOperation" } }, "type": "object", @@ -56138,6 +59297,17 @@ "title": "Max Workspaces", "default": 1 }, + "code_evaluator_execution_batch_size": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Code Evaluator Execution Batch Size" + }, "can_use_rbac": { "type": "boolean", "title": "Can Use Rbac", @@ -56388,11 +59558,6 @@ "title": "Can Restrict Browser Secrets", "default": false }, - "enable_monthly_usage_charts": { - "type": "boolean", - "title": "Enable Monthly Usage Charts", - "default": false - }, "new_rule_evaluator_creation_version": { "type": "integer", "title": "New Rule Evaluator Creation Version", @@ -56438,6 +59603,38 @@ "title": "Fleet Builtin Models Enabled", "default": false }, + "models_connect_via_langsmith_enabled": { + "type": "boolean", + "title": "Models Connect Via Langsmith Enabled", + "default": false + }, + "dev_zero_deployments_enabled": { + "type": "boolean", + "title": "Dev Zero Deployments Enabled", + "default": false + }, + "fleet_lcu_spend_limit_monthly": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Fleet Lcu Spend Limit Monthly" + }, + "langchain_provider_spend_limit_monthly": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Langchain Provider Spend Limit Monthly" + }, "max_agent_builder_assistants": { "type": "integer", "title": "Max Agent Builder Assistants", @@ -56602,7 +59799,8 @@ "engine_lcu_spend_limit_monthly": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -57157,7 +60355,8 @@ "engine_lcu_spend_limit_monthly": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -57415,7 +60614,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -57439,6 +60639,7 @@ "title": "Reasoning" } }, + "additionalProperties": true, "type": "object", "title": "OutputTokenDetails", "description": "Breakdown of output token counts.\n\nDoes *not* need to sum to full output token count. Does *not* need to have all keys.\n\nExample:\n ```python\n {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n ```\n\nMay also hold extra provider-specific keys.\n\n!!! version-added \"Added in `langchain-core` 0.3.9\"" @@ -57460,6 +60661,7 @@ "no_plan", "developer", "developer_01_2026", + "developer_07_2026", "plus", "plus_01_2026", "plus_07_2026", @@ -57467,9 +60669,11 @@ "developer_legacy", "plus_legacy", "free", + "free_07_2026", "enterprise_legacy", "startup", "startup_v0", + "startup_07_2026", "partner", "premier" ], @@ -58036,6 +61240,15 @@ "title": "Settings Type", "default": "complex" }, + "scope": { + "type": "string", + "enum": [ + "workspace", + "organization" + ], + "title": "Scope", + "default": "workspace" + }, "oauth_enabled": { "anyOf": [ { @@ -58169,6 +61382,18 @@ ], "title": "Name" }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, "created_at": { "type": "string", "format": "date-time", @@ -58608,7 +61833,7 @@ "extend_trace_retention": { "type": "boolean", "title": "Extend Trace Retention", - "default": true + "default": false } }, "type": "object", @@ -59591,6 +62816,28 @@ } ], "title": "Oauth Provider Id" + }, + "ls_user_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ls User Id" + }, + "agent_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Agent Id" } }, "type": "object", @@ -61080,6 +64327,18 @@ ], "title": "Run Session Id" }, + "run_trace_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Run Trace Id" + }, "start_time": { "type": "string", "format": "date-time", @@ -62174,7 +65433,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -62185,7 +65445,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -62196,7 +65457,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -62208,7 +65470,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -62222,7 +65485,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -62664,7 +65928,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -62675,7 +65940,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -62686,7 +65952,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -62698,7 +65965,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -62712,7 +65980,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -62782,7 +66051,8 @@ "exclusiveMinimum": 0.0 }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Limit Usd" @@ -62802,6 +66072,7 @@ "properties": { "limit_usd": { "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Limit Usd" }, "window": { @@ -62935,6 +66206,11 @@ "title": "Extend Only", "default": false }, + "is_tracing_disabled": { + "type": "boolean", + "title": "Is Tracing Disabled", + "default": false + }, "extend_evaluator_trace_retention": { "type": "boolean", "title": "Extend Evaluator Trace Retention", @@ -63433,6 +66709,11 @@ "title": "Is Managed Evaluator", "default": false }, + "is_tracing_disabled": { + "type": "boolean", + "title": "Is Tracing Disabled", + "default": false + }, "extend_evaluator_trace_retention": { "anyOf": [ { @@ -63582,6 +66863,17 @@ ], "title": "Evaluator Id" }, + "evaluator_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Evaluator Name" + }, "alignment_annotation_queue_id": { "anyOf": [ { @@ -63758,6 +67050,17 @@ "title": "Extend Only", "default": false }, + "is_tracing_disabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Is Tracing Disabled" + }, "extend_evaluator_trace_retention": { "anyOf": [ { @@ -64060,6 +67363,11 @@ "title": "Extend Only", "default": false }, + "is_tracing_disabled": { + "type": "boolean", + "title": "Is Tracing Disabled", + "default": false + }, "extend_evaluator_trace_retention": { "type": "boolean", "title": "Extend Evaluator Trace Retention", @@ -64724,7 +68032,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -64735,7 +68044,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -64746,7 +68056,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -64758,7 +68069,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -64772,7 +68084,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -65265,7 +68578,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -65276,7 +68590,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -65287,7 +68602,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -65712,7 +69028,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -65723,7 +69040,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -65734,7 +69052,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -65746,7 +69065,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -65760,7 +69080,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -66506,6 +69827,292 @@ "description": "Include additional information about where the group_by param was set." }, "RunStatsQueryParams": { + "properties": { + "id": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "trace": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Trace", + "description": "Filter runs by trace ID. When set, limit and cursor-based pagination are not applied — all runs in the trace are returned in a single response." + }, + "parent_run": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Parent Run" + }, + "run_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/RunTypeEnum" + }, + { + "type": "null" + } + ] + }, + "session": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "minItems": 1, + "title": "Session" + }, + "reference_example": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Reference Example" + }, + "execution_order": { + "anyOf": [ + { + "type": "integer", + "maximum": 1.0, + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Execution Order" + }, + "start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Start Time" + }, + "end_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "End Time" + }, + "error": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Error" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + }, + "trace_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Trace Filter" + }, + "tree_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tree Filter" + }, + "is_root": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Is Root" + }, + "data_source_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/RunsFilterDataSourceTypeEnum" + }, + { + "type": "null" + } + ] + }, + "skip_pagination": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Skip Pagination" + }, + "search_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Search Filter" + }, + "use_experimental_search": { + "type": "boolean", + "title": "Use Experimental Search", + "default": false + }, + "group_by": { + "anyOf": [ + { + "$ref": "#/components/schemas/RunStatsGroupBy" + }, + { + "type": "null" + } + ] + }, + "groups": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Groups" + }, + "select": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/RunStatsSelect" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Select" + }, + "reference_dataset_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Reference Dataset Id" + }, + "include_details": { + "type": "boolean", + "title": "Include Details", + "default": false + } + }, + "type": "object", + "required": [ + "session" + ], + "title": "RunStatsQueryParams", + "description": "Query params for run stats." + }, + "RunStatsQueryParamsPublic": { "properties": { "id": { "anyOf": [ @@ -66772,6 +70379,18 @@ ], "title": "Select" }, + "reference_dataset_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Reference Dataset Id" + }, "include_details": { "type": "boolean", "title": "Include Details", @@ -66779,8 +70398,8 @@ } }, "type": "object", - "title": "RunStatsQueryParams", - "description": "Query params for run stats." + "title": "RunStatsQueryParamsPublic", + "description": "Query params for run stats on a shared dataset." }, "RunStatsSelect": { "type": "string", @@ -67773,6 +71392,25 @@ "description": "Simple experiment info schema for use with comparative experiments" }, "SingleCustomChartResponse": { + "$ref": "#/components/schemas/SingleCustomChartResponseSerialized" + }, + "SingleCustomChartResponseBase": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CustomChartsDataPoint" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "SingleCustomChartResponseBase" + }, + "SingleCustomChartResponseSerialized": { "properties": { "data": { "items": { @@ -67825,7 +71463,16 @@ "title": "Index" }, "chart_type": { - "$ref": "#/components/schemas/CustomChartType" + "type": "string", + "enum": [ + "line", + "bar", + "table", + "kpi", + "top-k", + "pie" + ], + "title": "Chart Type" }, "series": { "items": { @@ -67854,23 +71501,7 @@ "chart_type", "series" ], - "title": "SingleCustomChartResponse" - }, - "SingleCustomChartResponseBase": { - "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/CustomChartsDataPoint" - }, - "type": "array", - "title": "Data" - } - }, - "type": "object", - "required": [ - "data" - ], - "title": "SingleCustomChartResponseBase" + "title": "SingleCustomChartResponseSerialized" }, "SingleCustomChartSubSectionResponse": { "properties": { @@ -69568,6 +73199,10 @@ "evaluator_count": { "type": "integer", "title": "Evaluator Count" + }, + "custom_app_count": { + "type": "integer", + "title": "Custom App Count" } }, "type": "object", @@ -69579,7 +73214,8 @@ "annotation_queue_count", "deployment_count", "dashboards_count", - "evaluator_count" + "evaluator_count", + "custom_app_count" ], "title": "TenantStats", "description": "Stats for a tenant." @@ -69717,6 +73353,7 @@ "title": "Type" } }, + "additionalProperties": true, "type": "object", "required": [ "name", @@ -69778,6 +73415,7 @@ "title": "Type" } }, + "additionalProperties": true, "type": "object", "required": [ "name", @@ -70148,7 +73786,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -70159,7 +73798,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -70170,7 +73810,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -71096,6 +74737,7 @@ "$ref": "#/components/schemas/OutputTokenDetails" } }, + "additionalProperties": true, "type": "object", "required": [ "input_tokens", @@ -71657,15 +75299,6 @@ "title": "Tenant", "description": "Tenant schema." }, - "abac.ErrorResponse": { - "type": "object", - "properties": { - "error": { - "type": "string", - "example": "Invalid request: missing required fields" - } - } - }, "alerts.AlertAction": { "type": "object", "required": [ @@ -71957,6 +75590,29 @@ } } }, + "annotationqueues.AddAnnotationQueueItemsRequest": { + "type": "object", + "properties": { + "items": { + "type": "array", + "maxItems": 100, + "items": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemInput" + } + } + } + }, + "annotationqueues.AddAnnotationQueueItemsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItem" + } + } + } + }, "annotationqueues.AddReviewerRequest": { "type": "object", "required": [ @@ -71976,6 +75632,252 @@ } } }, + "annotationqueues.AnnotationQueueItem": { + "type": "object", + "properties": { + "added_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "item_type": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemType" + }, + "last_reviewed_time": { + "description": "LastReviewedTime is always present on the wire (null until reviewed).", + "type": "string" + }, + "project_id": { + "type": "string" + }, + "queue_id": { + "type": "string" + }, + "run_id": { + "type": "string" + }, + "source_proposed_example_id": { + "type": "string" + }, + "start_time": { + "type": "string" + }, + "thread_id": { + "type": "string" + } + } + }, + "annotationqueues.AnnotationQueueItemCountResponse": { + "type": "object", + "properties": { + "count": { + "type": "integer" + } + } + }, + "annotationqueues.AnnotationQueueItemInput": { + "type": "object", + "properties": { + "item_type": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemType" + }, + "project_id": { + "type": "string" + }, + "run_id": { + "description": "RUN fields", + "type": "string" + }, + "session_id": { + "description": "SessionID is an alias for project_id.", + "type": "string" + }, + "source_proposed_example_id": { + "description": "SourceProposedExampleID links the queue item to the suggested example\nit was created from, when applicable.", + "type": "string" + }, + "start_time": { + "type": "string", + "format": "date-time" + }, + "thread_id": { + "type": "string" + } + } + }, + "annotationqueues.AnnotationQueueItemListStatus": { + "type": "string", + "enum": [ + "needs_my_review", + "needs_others_review", + "archived" + ], + "x-enum-varnames": [ + "AnnotationQueueItemStatusNeedsMyReview", + "AnnotationQueueItemStatusNeedsOthersReview", + "AnnotationQueueItemStatusArchived" + ] + }, + "annotationqueues.AnnotationQueueItemPlacementResponse": { + "type": "object", + "properties": { + "cursor": { + "type": "string" + }, + "item_type": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemType" + }, + "position": { + "type": "integer" + }, + "section": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemListStatus" + } + } + }, + "annotationqueues.AnnotationQueueItemType": { + "type": "string", + "enum": [ + "RUN", + "THREAD" + ], + "x-enum-varnames": [ + "AnnotationQueueItemTypeRun", + "AnnotationQueueItemTypeThread" + ] + }, + "annotationqueues.AnnotationQueueListItem": { + "type": "object", + "properties": { + "added_at": { + "type": "string" + }, + "completed_by": { + "type": "array", + "items": { + "type": "string" + } + }, + "effective_added_at": { + "type": "string" + }, + "id": { + "type": "string" + }, + "item_type": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemType" + }, + "last_reviewed_time": { + "description": "LastReviewedTime is always present on the wire (null until reviewed).", + "type": "string" + }, + "project_id": { + "type": "string" + }, + "queue_id": { + "type": "string" + }, + "reserved_by": { + "type": "array", + "items": { + "type": "string" + } + }, + "run_id": { + "type": "string" + }, + "source_proposed_example_id": { + "type": "string" + }, + "start_time": { + "type": "string" + }, + "thread_id": { + "type": "string" + } + } + }, + "annotationqueues.AnnotationQueueReviewStatus": { + "type": "string", + "enum": [ + "viewed", + "completed" + ], + "x-enum-varnames": [ + "AnnotationQueueReviewStatusViewed", + "AnnotationQueueReviewStatusCompleted" + ] + }, + "annotationqueues.CreateAnnotationQueueItemStatusRequest": { + "type": "object", + "properties": { + "override_added_at": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueReviewStatus" + } + } + }, + "annotationqueues.CreateAnnotationQueueItemStatusResponse": { + "type": "object", + "properties": { + "is_archived": { + "type": "boolean" + }, + "override_added_at": { + "type": "string" + }, + "queue_item_id": { + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueReviewStatus" + } + } + }, + "annotationqueues.DeleteAnnotationQueueItemsRequest": { + "type": "object", + "properties": { + "item_ids": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "annotationqueues.ListAnnotationQueueItemsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueListItem" + } + }, + "next_cursor": { + "type": "string" + }, + "previous_cursor": { + "type": "string" + } + } + }, + "annotationqueues.PatchAnnotationQueueItemRequest": { + "type": "object", + "properties": { + "added_at": { + "type": "string", + "format": "date-time" + }, + "last_reviewed_time": { + "type": "string", + "format": "date-time" + } + } + }, "authn.OrganizationConfig": { "type": "object", "properties": { @@ -72047,6 +75949,10 @@ "description": "CLIOEnabled indicates whether CLIO is enabled for this org.", "type": "boolean" }, + "code_evaluator_execution_batch_size": { + "description": "CodeEvaluatorExecutionBatchSize is a per-org override for how many code-evaluator\nexecutions are grouped into a single ACE /execute request. nil uses the global\ndefault (RUN_RULES_CODE_EXECUTE_BATCH_SIZE). Consumed only by smith-backend; carried\nhere so the value survives the org-config JSON round-trip into the Python auth payload.", + "type": "integer" + }, "datadog_rum_session_sample_rate": { "description": "DatadogRumSessionSampleRate indicates the sampling rate for datadog RUM sessions.", "type": "integer" @@ -72055,6 +75961,10 @@ "description": "DemoLgpNewGraphEnabled indicates whether this org can use the demo page for creating new graphs.", "type": "boolean" }, + "dev_zero_deployments_enabled": { + "description": "DevZeroDeploymentsEnabled indicates whether the org can create development deployments that scale to zero.", + "type": "boolean" + }, "enable_align_evaluators": { "description": "EnableAlignEvaluators indicates whether to enable the align evaluators flow for this org.", "type": "boolean" @@ -72079,10 +75989,6 @@ "description": "EnableMarkdownInTracing indicates whether markdown is enabled in tracing", "type": "boolean" }, - "enable_monthly_usage_charts": { - "description": "EnableMonthlyUsageCharts indicates whether to show monthly organization usage charts backed by Metronome for self hosted customers", - "type": "boolean" - }, "enable_pricing_redesign": { "description": "EnablePricingRedesign indicates whether the pricing redesign is enabled", "type": "boolean" @@ -72104,7 +76010,7 @@ "type": "boolean" }, "engine_default_enabled": { - "description": "EngineDefaultEnabled indicates whether Engine is enabled by default for this organization's plan.", + "description": "EngineDefaultEnabled is the plan-level Engine entitlement. An explicit false\ndisables Engine for the organization outright; true and nil both defer to the\norganization's own engine_enabled setting.", "type": "boolean" }, "engine_lcu_spend_limit_monthly": { @@ -72115,6 +76021,10 @@ "description": "FleetBuiltinModelsEnabled indicates whether the org can use Fleet's served\nbuilt-in models (the Fast/Pro/Max tiers). Resolved from the Metronome\nplan/customer custom field, falling back to organizations.config; code\ndefault false (paid feature, fail-closed).", "type": "boolean" }, + "fleet_lcu_spend_limit_monthly": { + "description": "FleetLCUSpendLimitMonthly caps an org's monthly Fleet LCU spend, resolved from\nMetronome custom fields. nil or negative means unlimited; 0 blocks all runs.", + "type": "number" + }, "ip_allowlist_enabled": { "description": "IPAllowlistEnabled indicates whether this org can configure and enforce IP allowlists.\nSet by Metronome entitlement, not admin-patchable.", "type": "boolean" @@ -72127,6 +76037,10 @@ "description": "KvDatasetMessageSupport indicates whether to use the new messages experience for KV datasets.", "type": "boolean" }, + "langchain_provider_spend_limit_monthly": { + "description": "LangChainProviderSpendLimitMonthly caps monthly at-cost Connect via LangSmith\nspend (USD). nil means unset, -1 means unlimited, and any other non-positive\nvalue blocks usage.", + "type": "number" + }, "langgraph_deploy_own_cloud_enabled": { "description": "LangGraphDeployOwnCloudEnabled indicates whether the org can deploy LangGraph cloud to their own cloud.", "type": "boolean" @@ -72179,7 +76093,7 @@ "type": "integer" }, "max_prompt_webhooks": { - "description": "MaxPromptWebhooks is the maximum number of prompt webhooks allowed for this org.", + "description": "MaxPromptWebhooks independently limits each org's Prompt Hub and Context Hub webhook collections.", "type": "integer" }, "max_sandbox_cpu": { @@ -72198,6 +76112,10 @@ "description": "MaxWorkspaces is the maximum number of workspaces allowed in this org. -1 means no limit.", "type": "integer" }, + "models_connect_via_langsmith_enabled": { + "description": "ModelsConnectViaLangSmithEnabled indicates whether the org can use Connect via\nLangSmith for /langchain gateway model requests. Defaults false.", + "type": "boolean" + }, "new_rule_evaluator_creation_version": { "description": "New Evaluator Version", "type": "integer" @@ -72493,6 +76411,9 @@ "sandboxes:tag-on-create", "sandboxes:update", "sandboxes:exec", + "snapshots:create", + "snapshots:delete", + "snapshots:update", "workspaces:manage-members", "workspaces:manage-secrets", "workspaces:manage", @@ -72514,7 +76435,9 @@ "fleet:write-admin-config", "organization:pats:create", "organization:read", - "organization:manage" + "organization:manage", + "organization:manage-model-configs", + "organization:manage-model-secrets" ], "x-enum-varnames": [ "AnnotationQueuesCreate", @@ -72573,6 +76496,9 @@ "SandboxesTagOnCreate", "SandboxesUpdate", "SandboxesExec", + "SnapshotsCreate", + "SnapshotsDelete", + "SnapshotsUpdate", "WorkspacesManageMembers", "WorkspacesManageSecrets", "WorkspacesManage", @@ -72594,9 +76520,38 @@ "FleetWriteAdminConfig", "OrganizationPATsCreate", "OrganizationRead", - "OrganizationManage" + "OrganizationManage", + "OrganizationManageModelConfigs", + "OrganizationManageModelSecrets" ] }, + "authz_internal.UpdateAccessPolicyPayload": { + "type": "object", + "properties": { + "condition_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/authz_internal.ConditionGroup" + } + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "effect": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, "backfills.restartBackfillRequest": { "type": "object", "properties": { @@ -72802,6 +76757,23 @@ } } }, + "data_planes.ErrorResponse": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "error": { + "type": "string" + }, + "missing_permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/data_planes.MissingPermission" + } + } + } + }, "data_planes.ListPublicDataPlanesResponse": { "type": "object", "properties": { @@ -72813,6 +76785,20 @@ } } }, + "data_planes.MissingPermission": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "decision": { + "type": "string" + }, + "resource_arn": { + "type": "string" + } + } + }, "data_planes.PublicDataPlane": { "type": "object", "properties": { @@ -73055,6 +77041,10 @@ }, "parent_commit": { "type": "string" + }, + "skip_webhooks": { + "description": "SkipWebhooks, when true, suppresses Context Hub commit webhooks for this\ncommit. Deliberately a plain bool, not the any (bool | []string) shape of\nthe prompt-hub CreateCommitReq.SkipWebhooks: Context Hub v1 has no\nper-webhook filtering, so a bool is the correct shape.", + "type": "boolean" } } }, @@ -73073,6 +77063,9 @@ } } }, + "errutil.UserError": { + "type": "object" + }, "evaluators.BulkDeleteEvaluatorFailedItem": { "type": "object", "properties": { @@ -73159,6 +77152,10 @@ "commit_hash_or_tag": { "type": "string" }, + "playground_settings_id": { + "description": "Model Configuration ID", + "type": "string" + }, "prompt_repo_handle": { "type": "string" }, @@ -73197,6 +77194,10 @@ "id": { "type": "string" }, + "is_managed": { + "description": "IsManaged marks a LangChain-managed evaluator (currently the managed\nPerceived Error judge). NULL in the DB is read as false via COALESCE.", + "type": "boolean" + }, "llm_evaluator": { "description": "Embedded child evaluator (populated based on type)", "allOf": [ @@ -73468,6 +77469,10 @@ "num_few_shot_examples": { "type": "integer" }, + "playground_settings_id": { + "description": "Model Configuration ID", + "type": "string" + }, "prompt_repo_handle": { "type": "string" }, @@ -73768,6 +77773,13 @@ "description": "CurrentSpendUSD is the spend in the policy's current window. Set for\nany spend_cap policy regardless of enabled state — disabled policies\nstill surface usage so users can see what would have been counted.\nNil for non-spend_cap policies or when the spend lookup failed.", "type": "number" }, + "current_usage": { + "description": "CurrentUsage is the consumed units in each configured limit's current\nwindow. Set for any rate_limit policy regardless of enabled state, one\nentry per limit in the config. Nil for non-rate_limit policies or when\nthe usage lookup failed.", + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.RateLimitUsage" + } + }, "description": { "type": "string" }, @@ -73787,7 +77799,7 @@ "type": "string" }, "parent_policy_id": { - "description": "ParentPolicyID is set on materialized children of a default_spend_cap\nto the default's id, and cleared (NULL) only when an admin Create\nwith the same matchers takes over the materialized row. Update on a\nchild preserves the link; Delete on the parent cascade-soft-deletes\nevery child rather than detaching them.", + "description": "ParentPolicyID is set on materialized children of a default_spend_cap\nto the default's id. An explicit Update or a Create with the same\nmatchers clears the link and takes ownership of the materialized row.\nDelete on the parent cascade-soft-deletes children still attached.", "type": "string" }, "policy_type": { @@ -73807,6 +77819,53 @@ } } }, + "gateway_policies.RateLimitMetric": { + "type": "string", + "enum": [ + "requests", + "tokens" + ], + "x-enum-varnames": [ + "RateLimitMetricRequests", + "RateLimitMetricTokens" + ] + }, + "gateway_policies.RateLimitUsage": { + "type": "object", + "properties": { + "metric": { + "description": "Metric is the counted usage dimension: requests or tokens.", + "allOf": [ + { + "$ref": "#/components/schemas/gateway_policies.RateLimitMetric" + } + ] + }, + "value": { + "description": "Value is the units consumed so far in the current window.", + "type": "integer" + }, + "window": { + "description": "Window is the time window the usage is measured over.", + "allOf": [ + { + "$ref": "#/components/schemas/gateway_policies.RateLimitWindow" + } + ] + } + } + }, + "gateway_policies.RateLimitWindow": { + "type": "string", + "enum": [ + "minute", + "hour" + ], + "x-enum-varnames": [ + "RateLimitWindowMinute", + "RateLimitWindowHour" + ] + }, "gateway_policies.SearchGatewayPoliciesRequest": { "type": "object", "properties": { @@ -73960,6 +78019,84 @@ } } }, + "info.BatchIngestConfig": { + "type": "object", + "properties": { + "scale_down_nempty_trigger": { + "type": "integer" + }, + "scale_up_nthreads_limit": { + "type": "integer" + }, + "scale_up_qsize_trigger": { + "type": "integer" + }, + "size_limit": { + "type": "integer" + }, + "size_limit_bytes": { + "type": "integer" + }, + "use_multipart_endpoint": { + "type": "boolean" + } + } + }, + "info.CustomerInfo": { + "type": "object", + "properties": { + "customer_id": { + "type": "string" + }, + "customer_name": { + "type": "string" + } + } + }, + "info.InfoGetResponse": { + "type": "object", + "properties": { + "batch_ingest_config": { + "$ref": "#/components/schemas/info.BatchIngestConfig" + }, + "customer_info": { + "$ref": "#/components/schemas/info.CustomerInfo" + }, + "git_sha": { + "type": "string" + }, + "instance_flags": { + "type": "object", + "additionalProperties": {} + }, + "license_expiration_time": { + "type": "string" + }, + "sdk_versions": { + "$ref": "#/components/schemas/info.SDKVersions" + }, + "version": { + "type": "string" + } + } + }, + "info.SDKVersions": { + "type": "object", + "properties": { + "max_go_sdk_version": { + "type": "string" + }, + "max_java_sdk_version": { + "type": "string" + }, + "max_js_sdk_version": { + "type": "string" + }, + "max_python_sdk_version": { + "type": "string" + } + } + }, "integrations.AgentBuilderIntegrationsPayload": { "type": "object", "properties": { @@ -74033,65 +78170,6 @@ } } }, - "issues_agent_usage.LCUSpendErrorResponse": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - }, - "issues_agent_usage.LCUSpendItem": { - "type": "object", - "properties": { - "lcu_total": { - "type": "string" - }, - "lcu_unpriced_row_count": { - "type": "integer" - }, - "session_id": { - "type": "string" - }, - "session_name": { - "type": "string" - }, - "tenant_id": { - "type": "string" - }, - "tenant_name": { - "type": "string" - } - } - }, - "issues_agent_usage.LCUSpendResponse": { - "type": "object", - "properties": { - "default_monthly_spend_limit_lcu": { - "description": "DefaultMonthlySpendLimitLCU is the org-admin default applied when the admin limit\nis unset (NULL) — what the UI shows as \"using the default\". Lets the UI label the\ndefault without hardcoding it. Serialized as a string for NUMERIC precision.", - "type": "string" - }, - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendItem" - } - }, - "organization_id": { - "type": "string" - }, - "period_end": { - "type": "string" - }, - "period_start": { - "type": "string" - }, - "resolved_monthly_spend_limit_lcu": { - "description": "ResolvedMonthlySpendLimitLCU is the effective monthly LCU spend limit enforced for\nthis org — the minimum of the finance, plan, and admin layers — or null when\nunlimited. Surfaced so the UI can render spend against the true enforced limit\nrather than the admin layer alone. Serialized as a string for NUMERIC precision.", - "type": "string" - } - } - }, "mcp_vendors.ArcadeAccountOrg": { "type": "object", "properties": { @@ -74421,6 +78499,32 @@ } } }, + "oauth.AuthorizedAppView": { + "type": "object", + "properties": { + "authorized_at": { + "type": "string" + }, + "client_id": { + "type": "string" + }, + "client_name": { + "type": "string" + }, + "client_uri": { + "type": "string" + }, + "logo_uri": { + "type": "string" + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "oauth.ClientPublicMetadata": { "type": "object", "properties": { @@ -74535,6 +78639,48 @@ } } }, + "oauth.CreateOAuthClientRequest": { + "type": "object", + "properties": { + "allowed_scopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "client_name": { + "type": "string" + }, + "client_type": { + "description": "\"public\" or \"confidential\"", + "type": "string" + }, + "client_uri": { + "type": "string" + }, + "grant_types": { + "type": "array", + "items": { + "type": "string" + } + }, + "logo_uri": { + "type": "string" + }, + "policy_uri": { + "type": "string" + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + } + }, + "tos_uri": { + "type": "string" + } + } + }, "oauth.DeviceCodeResponse": { "type": "object", "properties": { @@ -74555,6 +78701,152 @@ } } }, + "oauth.OAuthClientCredentialsResponse": { + "type": "object", + "properties": { + "client": { + "$ref": "#/components/schemas/oauth.OAuthClientView" + }, + "client_secret": { + "type": "string" + } + } + }, + "oauth.OAuthClientListResponse": { + "type": "object", + "properties": { + "clients": { + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth.OAuthClientView" + } + } + } + }, + "oauth.OAuthClientView": { + "type": "object", + "properties": { + "allowed_scopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "client_id": { + "type": "string" + }, + "client_name": { + "type": "string" + }, + "client_type": { + "type": "string" + }, + "client_uri": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "grant_types": { + "type": "array", + "items": { + "type": "string" + } + }, + "id": { + "type": "string" + }, + "logo_uri": { + "type": "string" + }, + "policy_uri": { + "type": "string" + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + } + }, + "tos_uri": { + "type": "string" + }, + "updated_at": { + "type": "string" + } + } + }, + "oauth.OIDCProviderMetadata": { + "type": "object", + "properties": { + "authorization_endpoint": { + "type": "string" + }, + "claims_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "code_challenge_methods_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "grant_types_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "id_token_signing_alg_values_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "issuer": { + "type": "string" + }, + "jwks_uri": { + "type": "string" + }, + "response_types_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "scopes_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "subject_types_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "token_endpoint": { + "type": "string" + }, + "token_endpoint_auth_methods_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "userinfo_endpoint": { + "type": "string" + } + } + }, "oauth.TokenErrorResponse": { "type": "object", "properties": { @@ -74575,6 +78867,9 @@ "expires_in": { "type": "integer" }, + "id_token": { + "type": "string" + }, "refresh_token": { "type": "string" }, @@ -74586,6 +78881,67 @@ } } }, + "oauth.UpdateOAuthClientRequest": { + "type": "object", + "properties": { + "allowed_scopes": { + "type": "array", + "items": { + "type": "string" + } + }, + "client_name": { + "type": "string" + }, + "client_uri": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "logo_uri": { + "type": "string" + }, + "policy_uri": { + "type": "string" + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + } + }, + "tos_uri": { + "type": "string" + } + } + }, + "oauth.UserinfoResponse": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "email_verified": { + "type": "boolean" + }, + "ls_org_id": { + "type": "string" + }, + "ls_org_name": { + "type": "string" + }, + "name": { + "type": "string" + }, + "picture": { + "type": "string" + }, + "sub": { + "type": "string" + } + } + }, "orgs.LinkedLoginMethod": { "type": "object", "properties": { @@ -74882,7 +79238,8 @@ "COMPLETION_COST_DETAILS", "PRICE_MODEL_ID", "TAGS", - "THREAD_EVALUATION_TIME" + "THREAD_EVALUATION_TIME", + "FEEDBACK_STATS" ] }, "example": [ @@ -75403,6 +79760,12 @@ "type": "boolean", "example": true }, + "last_queued_at": { + "description": "`last_queued_at` is the most recent time this run was added to an annotation queue.", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:31:00Z" + }, "latency_seconds": { "description": "`latency_seconds` is wall-clock duration from start to end in seconds.", "type": "number", @@ -75605,6 +79968,7 @@ "ATTACHMENTS", "THREAD_EVALUATION_TIME", "IS_IN_DATASET", + "LAST_QUEUED_AT", "SHARE_URL", "FEEDBACK_STATS" ], @@ -75651,6 +80015,7 @@ "RunSelectAttachments", "RunSelectThreadEvaluationTime", "RunSelectIsInDataset", + "RunSelectLastQueuedAt", "RunSelectShareURL", "RunSelectFeedbackStats" ] @@ -75689,6 +80054,14 @@ "RunTypeParser" ] }, + "query.RunURLResponse": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + }, "query.Trace": { "type": "object", "properties": { @@ -75833,6 +80206,39 @@ } } }, + "sandboxapi.ContextHubMountSpec": { + "type": "object", + "required": [ + "repo" + ], + "properties": { + "initial_pull_only": { + "description": "InitialPullOnly syncs the repo once at startup instead of polling for\nupdates for the sandbox's lifetime.", + "type": "boolean" + }, + "repo": { + "description": "Repo is the Context Hub repository to sync, as \"owner/repo\"\n(e.g. \"-/my-agent\", where \"-\" is the current workspace). The repo's\nlatest commit tree is mirrored into the mount path.", + "type": "string" + } + } + }, + "sandboxapi.FileInfo": { + "type": "object", + "properties": { + "is_dir": { + "type": "boolean" + }, + "modified_at": { + "type": "string" + }, + "path": { + "type": "string" + }, + "size_bytes": { + "type": "integer" + } + } + }, "sandboxapi.GCSMountSpec": { "type": "object", "required": [ @@ -75884,6 +80290,20 @@ } } }, + "sandboxapi.GrepMatch": { + "type": "object", + "properties": { + "line": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "text": { + "type": "string" + } + } + }, "sandboxapi.MountCacheSpec": { "type": "object", "properties": { @@ -75902,12 +80322,14 @@ "enum": [ "s3", "gcs", - "git" + "git", + "contexthub" ], "x-enum-varnames": [ "MountKindS3", "MountKindGCS", - "MountKindGit" + "MountKindGit", + "MountKindContextHub" ] }, "sandboxapi.MountSpec": { @@ -75921,6 +80343,9 @@ "cache": { "$ref": "#/components/schemas/sandboxapi.MountCacheSpec" }, + "contexthub": { + "$ref": "#/components/schemas/sandboxapi.ContextHubMountSpec" + }, "gcs": { "$ref": "#/components/schemas/sandboxapi.GCSMountSpec" }, @@ -75944,7 +80369,8 @@ "enum": [ "s3", "gcs", - "git" + "git", + "contexthub" ], "allOf": [ { @@ -75957,7 +80383,8 @@ "mapping": { "s3": "#/components/schemas/sandboxapi.S3BucketMountSpec", "gcs": "#/components/schemas/sandboxapi.GCSBucketMountSpec", - "git": "#/components/schemas/sandboxapi.GitRepoMountSpec" + "git": "#/components/schemas/sandboxapi.GitRepoMountSpec", + "contexthub": "#/components/schemas/sandboxapi.ContextHubRepoMountSpec" }, "propertyName": "type" }, @@ -75970,6 +80397,9 @@ }, { "$ref": "#/components/schemas/sandboxapi.GitRepoMountSpec" + }, + { + "$ref": "#/components/schemas/sandboxapi.ContextHubRepoMountSpec" } ] }, @@ -76109,6 +80539,14 @@ "description": "IncludeMemory, when true, captures a full VM memory snapshot\nalongside the filesystem clone. Only honored when the sandbox is running\nAND Checkpoint is omitted (i.e. a fresh in-VM checkpoint is requested).\nDefaults to false to keep snapshots small unless memory restore is\nexplicitly desired.", "type": "boolean" }, + "labels": { + "description": "Labels seed the captured snapshot's labels.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxes.Labels" + } + ] + }, "name": { "type": "string" } @@ -76159,7 +80597,16 @@ "idle_ttl_seconds": { "type": "integer" }, + "labels": { + "description": "Labels are free-form key/value metadata persisted with the sandbox and returned on reads. Labels from the source snapshot are inherited unless overridden here.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxes.Labels" + } + ] + }, "mem_bytes": { + "description": "Memory for the sandbox, in bytes. Memory is tied to CPU at 4 GiB per vCPU: omit it and it follows that ratio; set it and it must stay within 50% of the ratio for the requested CPU, so a 1 vCPU sandbox accepts 2-6 GiB. Setting memory without CPU derives the CPU from the same ratio. Maximum 64 GiB.", "type": "integer" }, "mount_config": { @@ -76168,6 +80615,10 @@ "name": { "type": "string" }, + "preserve_memory_on_stop": { + "description": "PreserveMemoryOnStop, when true, suspends the sandbox's memory on a\nvoluntary stop (idle timeout or explicit stop) so the next start resumes\nfrom where it left off. Default false discards memory and keeps only the\nfilesystem, so the next start is a cold boot. Restarts triggered by\ninfrastructure maintenance always preserve memory regardless of this setting.", + "type": "boolean" + }, "proxy_config": { "$ref": "#/components/schemas/sandboxes.ProxyConfig" }, @@ -76206,6 +80657,14 @@ "fs_capacity_bytes": { "type": "integer" }, + "labels": { + "description": "Labels seed the snapshot's labels, overriding any label of the same key derived from the Docker image.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxes.Labels" + } + ] + }, "name": { "type": "string" }, @@ -76274,6 +80733,126 @@ } } }, + "sandboxes.ExecStreamRequest": { + "type": "object", + "properties": { + "command": { + "description": "Command accepts either a shell command string or an argv string array.", + "type": "array", + "items": { + "type": "string" + } + }, + "command_id": { + "description": "CommandID makes the request idempotent: a known ID attaches to that\nrunning command instead of starting a second one.", + "type": "string" + }, + "cwd": { + "type": "string" + }, + "env": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "idle_timeout_seconds": { + "description": "0 = default, -1 = never idle-kill", + "type": "integer" + }, + "shell": { + "type": "string" + }, + "stdin": { + "description": "Stdin is the process's entire standard input, base64 on the wire. It is\nwritten once when the command is spawned and then closed, so the process\nreads EOF; there is no stdin streaming on this endpoint.", + "type": "string", + "format": "byte" + }, + "timeout_seconds": { + "description": "0 = no timeout", + "type": "integer" + }, + "ttl_seconds": { + "description": "0 = default, -1 = keep forever", + "type": "integer" + } + } + }, + "sandboxes.ExecStreamResumeRequest": { + "type": "object", + "properties": { + "command_id": { + "description": "CommandID names the command to attach to.", + "type": "string" + }, + "stderr_offset": { + "type": "integer" + }, + "stdout_offset": { + "description": "StdoutOffset and StderrOffset are where to continue from, and are also the\nack for every buffered byte below them. Zero replays from the beginning,\nwhich is what a retry sends when the stream broke before any output arrived.", + "type": "integer" + } + } + }, + "sandboxes.GlobRequest": { + "type": "object", + "properties": { + "limit": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "pattern": { + "type": "string" + } + } + }, + "sandboxes.GlobResponse": { + "type": "object", + "properties": { + "matches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxapi.FileInfo" + } + }, + "truncated": { + "type": "boolean" + } + } + }, + "sandboxes.GrepRequest": { + "type": "object", + "properties": { + "glob": { + "type": "string" + }, + "limit": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "pattern": { + "type": "string" + } + } + }, + "sandboxes.GrepResponse": { + "type": "object", + "properties": { + "matches": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxapi.GrepMatch" + } + }, + "truncated": { + "type": "boolean" + } + } + }, "sandboxes.HeaderType": { "type": "string", "enum": [ @@ -76287,6 +80866,12 @@ "HeaderTypeWorkspaceSecret" ] }, + "sandboxes.Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "sandboxes.ProxyAWSConfig": { "type": "object", "required": [ @@ -76389,6 +80974,13 @@ "enabled": { "type": "boolean" }, + "env_vars": { + "description": "EnvVars are plaintext env vars set for every command in the sandbox while this rule is enabled. Use them for tools that refuse to run unless a credential env var is present (e.g. gh needs GH_TOKEN) even though this rule injects the real credential on the wire — set a dummy value here so the command starts. Explicit per-sandbox env_vars win over these, and provider-managed (AWS/GCP) vars win over both.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "gcp": { "$ref": "#/components/schemas/sandboxes.ProxyGCPConfig" }, @@ -76577,6 +81169,9 @@ "idle_ttl_seconds": { "type": "integer" }, + "labels": { + "$ref": "#/components/schemas/sandboxes.Labels" + }, "mem_bytes": { "type": "integer" }, @@ -76586,6 +81181,9 @@ "name": { "type": "string" }, + "preserve_memory_on_stop": { + "type": "boolean" + }, "proxy_config": { "$ref": "#/components/schemas/sandboxes.ProxyConfig" }, @@ -76692,6 +81290,9 @@ "image_digest": { "type": "string" }, + "labels": { + "$ref": "#/components/schemas/sandboxes.Labels" + }, "memory_snapshot_size_bytes": { "description": "MemorySnapshotSizeBytes is non-nil iff the snapshot was captured with\nVM memory state. A non-nil value is the canonical signal that this\nsnapshot can warm-restore from memory; nil means rootfs only.", "type": "integer" @@ -76749,6 +81350,7 @@ "type": "integer" }, "mem_bytes": { + "description": "New memory for the sandbox, in bytes. The 4 GiB per vCPU ratio applies when the sandbox is created; a resize enforces only the maximum of 64 GiB.", "type": "integer" }, "name": { @@ -76992,6 +81594,17 @@ } } }, + "share.DeleteShareTokenRequestBody": { + "type": "object", + "properties": { + "session_id": { + "description": "session_id is the tracing project UUID containing the trace.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" + } + } + }, "shared.ProblemDetails": { "description": "RFC 7807 problem details returned on V2 API errors.", "type": "object", @@ -77262,12 +81875,12 @@ "type": "string" }, "max_start_time": { - "description": "`max_start_time` is the exclusive upper bound on thread activity (RFC3339 date-time).", + "description": "`max_start_time` is the exclusive upper bound on thread activity (RFC3339 date-time). Defaults to now (UTC) when omitted.", "type": "string", "format": "date-time" }, "min_start_time": { - "description": "`min_start_time` is the inclusive lower bound on thread activity (RFC3339 date-time).", + "description": "`min_start_time` is the inclusive lower bound on thread activity (RFC3339 date-time). Defaults to 1 day before now (UTC) when omitted.", "type": "string", "format": "date-time" }, @@ -77491,6 +82104,11 @@ "format": "date-time", "example": "2025-01-15T12:00:01.500Z" }, + "error": { + "description": "`error` is the full root run error message when the run failed. Omitted unless included in `selects`.", + "type": "string", + "example": "context deadline exceeded" + }, "error_preview": { "description": "`error_preview` is a short error summary when the run failed. Omitted unless included in `selects`.", "type": "string" @@ -77501,6 +82119,10 @@ "format": "date-time", "example": "2024-01-15T10:30:00.312Z" }, + "inputs": { + "description": "`inputs` is the full root run input payload. Omitted unless included in `selects`.", + "type": "object" + }, "inputs_preview": { "description": "`inputs_preview` is a truncated text preview of inputs. Omitted unless included in `selects`.", "type": "string" @@ -77517,6 +82139,10 @@ "description": "`op` is a numeric code identifying the root run's `run_type` (for example LLM vs. tool vs. chain). Encoded as a number for compatibility with legacy clients; prefer the string `run_type` on `RunResponse` when available. Omitted unless included in `selects`.", "type": "number" }, + "outputs": { + "description": "`outputs` is the full root run output payload. Omitted unless included in `selects`.", + "type": "object" + }, "outputs_preview": { "description": "`outputs_preview` is a truncated text preview of outputs. Omitted unless included in `selects`.", "type": "string" @@ -77566,7 +82192,7 @@ "type": "integer" }, "trace_id": { - "description": "`trace_id` is the UUID of this trace (the root run). Always present.", + "description": "`trace_id` is the UUID of this trace (the root run). Returned when `TRACE_ID` is in `selects`,\nor when `selects` is omitted entirely (sole fallback field).", "type": "string", "format": "uuid", "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" @@ -77588,6 +82214,9 @@ "FIRST_TOKEN_TIME", "INPUTS_PREVIEW", "OUTPUTS_PREVIEW", + "INPUTS", + "OUTPUTS", + "ERROR", "PROMPT_COST", "COMPLETION_COST", "TOTAL_COST", @@ -77611,6 +82240,9 @@ "ThreadTraceSelectFirstTokenTime", "ThreadTraceSelectInputsPreview", "ThreadTraceSelectOutputsPreview", + "ThreadTraceSelectInputs", + "ThreadTraceSelectOutputs", + "ThreadTraceSelectError", "ThreadTraceSelectPromptCost", "ThreadTraceSelectCompletionCost", "ThreadTraceSelectTotalCost", @@ -77874,6 +82506,10 @@ "type": "object" } }, + "recurrences_since_watching": { + "description": "RecurrencesSinceWatching counts linked traces whose run start_time is after\nwatching_since — i.e. recurrences observed during the current watch period.", + "type": "integer" + }, "session_id": { "type": "string" }, @@ -77897,6 +82533,9 @@ }, "updated_at": { "type": "string" + }, + "watching_since": { + "type": "string" } } }, @@ -77966,11 +82605,15 @@ "type": "string", "enum": [ "open", + "fixing", + "watching", "completed", "ignored" ], "x-enum-varnames": [ "StatusOpen", + "StatusFixing", + "StatusWatching", "StatusCompleted", "StatusIgnored" ] @@ -78039,6 +82682,9 @@ "cron_schedule": { "type": "string" }, + "engine_version": { + "type": "string" + }, "github_base_branch": { "type": "string" }, @@ -78189,6 +82835,13 @@ "id": { "type": "string" }, + "issue_statuses": { + "description": "IssueStatuses scopes delivery to issues in one of these statuses. Nil/empty\n(the default) fires for every status.", + "type": "array", + "items": { + "type": "string" + } + }, "organization_id": { "description": "OrganizationID is derived from the tenant on fetch (no stored column); the\nrow carries it so Slack delivery can address the org-scoped install.", "type": "string" @@ -78347,6 +83000,11 @@ "required": [ "git" ] + }, + { + "required": [ + "contexthub" + ] } ] } @@ -78398,6 +83056,11 @@ "required": [ "git" ] + }, + { + "required": [ + "contexthub" + ] } ] } @@ -78446,6 +83109,64 @@ "required": [ "gcs" ] + }, + { + "required": [ + "contexthub" + ] + } + ] + } + }, + "sandboxapi.ContextHubRepoMountSpec": { + "type": "object", + "required": [ + "id", + "mount_path", + "type", + "contexthub" + ], + "properties": { + "contexthub": { + "$ref": "#/components/schemas/sandboxapi.ContextHubMountSpec" + }, + "id": { + "type": "string", + "maxLength": 64 + }, + "mount_path": { + "type": "string" + }, + "read_only": { + "type": "boolean" + }, + "type": { + "enum": [ + "contexthub" + ], + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.MountKind" + } + ] + } + }, + "not": { + "anyOf": [ + { + "required": [ + "s3" + ] + }, + { + "required": [ + "gcs" + ] + }, + { + "required": [ + "git" + ] } ] }