diff --git a/src/langsmith/langsmith-platform-openapi.json b/src/langsmith/langsmith-platform-openapi.json index 9ba5e761a6..da8f8085c3 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" + "format": "uuid" } } ], "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": { @@ -16511,13 +17038,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 +17076,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 +17132,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 +17173,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 +17216,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 +17257,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" } } } @@ -19692,7 +20299,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,13 +20336,20 @@ { "name": "workspace_ids", "in": "query", - "required": true, + "required": false, "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], "title": "Workspace Ids" } }, @@ -19842,13 +20456,20 @@ { "name": "workspace_ids", "in": "query", - "required": true, + "required": false, "schema": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], "title": "Workspace Ids" } }, @@ -25296,7 +25917,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 +25953,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": { + "default": true, + "type": "boolean", + "title": "Include Stats" + } + }, + { + "description": "Limit is the pagination limit", + "name": "limit", + "in": "query", + "schema": { + "default": 20, + "type": "integer", + "maximum": 100, + "minimum": 1, + "title": "Limit" + } + }, + { + "description": "Offset is the pagination offset", + "name": "offset", + "in": "query", + "schema": { + "default": 0, + "type": "integer", + "minimum": 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 +26036,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25340,7 +26046,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25350,14 +26056,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 +26076,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 +26117,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 +26147,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25425,15 +26159,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 +26179,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": { + "default": false, + "type": "boolean", + "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": { + "default": false, + "type": "boolean", + "title": "Include Model" + } + }, + { + "name": "is_view", + "in": "query", + "schema": { + "default": false, + "type": "boolean", + "title": "Is View" + } } ], "responses": { @@ -25467,10 +26256,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/commits.CommitResponse" } } } @@ -25480,7 +26266,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25490,7 +26276,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25500,15 +26286,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 +26308,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 +26356,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 +26370,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 +26444,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 +26466,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authn.PublicAuthInfo" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -25681,73 +26479,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 +26571,7 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } @@ -25767,25 +26581,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 +26603,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 +26637,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 +26655,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 +26679,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 +26721,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 +26741,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 +26757,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 +26836,7 @@ "x-public": true } }, - "/datasets/{dataset_id}/experiment-view-overrides": { + "/api/v1/platform/alerts/{session_id}/{alert_rule_id}": { "get": { "security": [ { @@ -26153,94 +26849,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 +26950,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 +27066,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 +27194,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 +27268,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 +27288,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": { + "default": 20, + "type": "integer", + "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": { + "default": "forward", + "enum": [ + "forward", + "backward" + ], "type": "string", - "title": "End" + "title": "Direction" } } ], @@ -26756,7 +27371,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendResponse" + "$ref": "#/components/schemas/annotationqueues.ListAnnotationQueueItemsResponse" } } } @@ -26766,7 +27381,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -26776,27 +27391,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 +27421,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 +27462,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 +27524,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 +27592,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 +27636,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 +27683,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.ClientPublicMetadata" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -27124,7 +27696,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 +27716,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 +27758,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 +27799,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 +27839,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 +27861,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 +27902,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 +27944,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 +27976,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 +28002,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -27378,15 +28017,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 +28037,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 +28122,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 +28134,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenResponse" + "$ref": "#/components/schemas/examples.ExamplesDeletedResponse" } } } @@ -27466,17 +28144,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 +28184,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": { + "type": "string", + "format": "uuid" + } + } ], - "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": { + "type": "string", + "format": "uuid" + } + } ], - "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 +28408,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,57 +28460,102 @@ "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, + "default": 100, "type": "integer", - "maximum": 100, - "default": 50, "title": "Limit" } }, { + "description": "Offset for pagination", "name": "offset", "in": "query", "schema": { - "minimum": 0, - "type": "integer", "default": 0, + "type": "integer", "title": "Offset" } } @@ -27796,7 +28566,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.TagTransitionHistoryResponse" + "$ref": "#/components/schemas/evaluators.ListEvaluatorsResponse" } } } @@ -27806,17 +28576,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 +28606,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } }, "x-public": true - } - }, - "/runs": { + }, "post": { "security": [ { @@ -27848,34 +28626,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 +28648,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 +28690,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.Run" + "$ref": "#/components/schemas/evaluators.CreateEvaluatorRequest" } } } } - } - }, - "/runs/batch": { - "post": { + }, + "delete": { "security": [ { "API Key": [] @@ -27957,34 +28708,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 +28755,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": [] + }, + { + "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.", + "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" } }, - "429": { - "description": "Too Many Requests", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.ErrorResponse" - } - } + { + "description": "Filter to a specific evaluator (UUID). Mutually exclusive with group_by.", + "name": "evaluator_id", + "in": "query", + "schema": { + "type": "string", + "title": "Evaluator Id" } - } - }, - "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": "Filter to a specific project (UUID). Mutually exclusive with group_by.", + "name": "session_id", + "in": "query", + "schema": { + "type": "string", + "title": "Session Id" } - } - } - } - }, - "/runs/multipart": { - "post": { - "security": [ + }, { - "API Key": [] + "description": "Filter to a specific dataset (UUID). Mutually exclusive with group_by.", + "name": "dataset_id", + "in": "query", + "schema": { + "type": "string", + "title": "Dataset Id" + } }, { - "Tenant 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" + } }, { - "Bearer Auth": [] + "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 +28908,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 +28970,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 +29002,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 +29062,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 +29116,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28406,10 +29126,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 +29146,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 +29166,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 +29198,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 +29228,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28491,10 +29238,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28506,75 +29250,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 +29314,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 +29392,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 +29422,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 +29457,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28768,16 +29467,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 +29489,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 +29514,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28814,7 +29524,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28824,7 +29534,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 +29556,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 +29576,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 +29610,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28895,7 +29620,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/secrets.ErrorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28905,63 +29630,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 +29712,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 +29749,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 +29811,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 +29857,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 +29892,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 +29912,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": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "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": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "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": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "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 +30246,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 +30262,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 +30359,7 @@ }, "x-public": true }, - "patch": { + "delete": { "security": [ { "API Key": [] @@ -29596,15 +30371,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 +30387,8 @@ } }, { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Repository handle", + "name": "repo", "in": "path", "required": true, "schema": { @@ -29622,137 +30397,37 @@ } ], "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" + } } } } }, "403": { "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.UpdateAlertRuleRequest" - } - } - } - } - } - }, - "/v1/platform/annotation-queues/{queue_id}/reviewers": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Assigns a single identity as a reviewer for the queue. Idempotent.", - "tags": [ - "annotation_queues" - ], - "summary": "Add a reviewer to an annotation queue", - "parameters": [ - { - "description": "Queue ID", - "name": "queue_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/annotationqueues.AddReviewerResponse" - } - } - } - }, - "400": { - "description": "Bad Request", "content": { "application/json": { "schema": { @@ -29791,21 +30466,11 @@ } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/annotationqueues.AddReviewerRequest" - } - } - } - } + "x-public": true } }, - "/v1/platform/annotation-queues/{queue_id}/reviewers/{identity_id}": { - "delete": { + "/api/v1/platform/hub/repos/{owner}/{repo}/directories/commits": { + "post": { "security": [ { "API Key": [] @@ -29817,15 +30482,15 @@ "Bearer Auth": [] } ], - "description": "Unassigns an 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": "Remove a reviewer from 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": { @@ -29833,8 +30498,8 @@ } }, { - "description": "Identity ID of the reviewer to remove", - "name": "identity_id", + "description": "Repository handle", + "name": "repo", "in": "path", "required": true, "schema": { @@ -29843,24 +30508,18 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/directories.CommitResponse" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { @@ -29872,8 +30531,8 @@ } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -29884,77 +30543,55 @@ } } } - } - }, - "x-public": true - } - }, - "/v1/platform/datasets/examples/delete": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "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.", - "tags": [ - "examples" - ], - "summary": "Hard Delete Examples", - "parameters": [], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/examples.ExamplesDeletedResponse" - } - } - } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "422": { - "description": "Unprocessable Entity", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -29966,15 +30603,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.DeleteExamplesRequest" + "$ref": "#/components/schemas/directories.CreateDirectoryCommitRequest" } } } } } }, - "/v1/platform/datasets/{dataset_id}/examples": { - "post": { + "/api/v1/platform/issues": { + "get": { "security": [ { "API Key": [] @@ -29986,114 +30623,1381 @@ "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 issues for the authenticated tenant, optionally filtered\nby session, status, severity, tag, or last modified time.", "tags": [ - "examples" + "issues" ], - "summary": "Upload Examples", + "summary": "[Beta] List issues", "parameters": [ { - "description": "Dataset ID", - "name": "dataset_id", - "in": "path", - "required": true, + "description": "Filter by session ID (UUID)", + "name": "session_id", + "in": "query", "schema": { "type": "string", - "format": "uuid" + "title": "Session Id" } - } - ], - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/examples.ExamplesCreatedResponse" - } - } + }, + { + "description": "Filter by session name (exact match)", + "name": "session_name", + "in": "query", + "schema": { + "type": "string", + "title": "Session Name" } }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { + { + "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": { + "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": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/platform/issues-agent": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant 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.", + "tags": [ + "issues-agent" + ], + "summary": "[Beta] List issues agent configs", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$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, + "parameters": [] + } + }, + "/api/v1/platform/issues/{id}": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns one issue for the authenticated tenant.", + "tags": [ + "issues" + ], + "summary": "[Beta] Get issue", + "parameters": [ + { + "description": "Issue ID (UUID)", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.Issue" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/platform/issues/{id}/fix-verdict": { + "post": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Records whether a fix resolved the issue when replayed against its preview deployment.", + "tags": [ + "issues" + ], + "summary": "Record a fix-verification verdict", + "parameters": [ + { + "description": "Issue ID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.FixVerification" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.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": [] + }, + { + "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/tracer_session_issues.StartPreviewResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "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" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.StartPreviewRequest" + } + } + } + } + } + }, + "/api/v1/platform/issues/{id}/views": { + "post": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "**Beta:** Records that the current user opened this issue.\nIdempotent. Drives the Engine tab unread-issues badge.", + "tags": [ + "issues" + ], + "summary": "[Beta] Mark issue viewed", + "parameters": [ + { + "description": "Issue ID (UUID)", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + } + } + } + } + }, + "x-public": true + } + }, + "/api/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", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + } + }, + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Returns vendor metadata and current settings.", + "tags": [ + "mcp_vendors" + ], + "summary": "Get MCP vendor", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.GetMcpVendorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/account": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Resolves OAuth token and returns the vendor's account info.", + "tags": [ + "mcp_vendors" + ], + "summary": "Get vendor account", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountResponseList" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/mcp-servers": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Returns the MCP gateways from the vendor for the workspace's configured org/project.", + "tags": [ + "mcp_vendors" + ], + "summary": "List MCP servers for a vendor", + "parameters": [ + { + "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": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ListMcpGatewaysResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/settings": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Returns the current vendor-specific settings.", + "tags": [ + "mcp_vendors" + ], + "summary": "Get vendor settings", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + } + }, + "x-public": true + }, + "put": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Replaces vendor settings.", + "tags": [ + "mcp_vendors" + ], + "summary": "Replace vendor settings", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + } + } + } + } + }, + "post": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Initializes vendor settings.", + "tags": [ + "mcp_vendors" + ], + "summary": "Create vendor settings", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + } + } + } + } + }, + "delete": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Removes vendor settings.", + "tags": [ + "mcp_vendors" + ], + "summary": "Delete vendor settings", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "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" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/tools": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Returns the tool catalog for this vendor.", + "tags": [ + "mcp_vendors" + ], + "summary": "List tools for a vendor", + "parameters": [ + { + "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": { + "200": { + "description": "OK", + "content": { + "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ListVendorToolsResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.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}" + "x-public": true + } + }, + "/api/v1/platform/oauth/authorized-apps": { + "get": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Lists the third-party applications the authenticated user has authorized to sign in with LangSmith.", + "tags": [ + "oauth" + ], + "summary": "List authorized applications", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth.AuthorizedAppView" } - }, - "required": [ - "{example_id}", - "{example_id}.inputs" - ] + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.TokenErrorResponse" + } } } } - } - }, - "patch": { + }, + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/oauth/authorized-apps/{clientID}": { + "delete": { "security": [ { "API Key": [] @@ -30105,80 +32009,128 @@ "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": "Revokes the authenticated user's authorization for an application and invalidates that application's active tokens for the user.", "tags": [ - "examples" + "oauth" ], - "summary": "Update Examples", + "summary": "Revoke an authorized application", "parameters": [ { - "description": "Dataset ID", - "name": "dataset_id", + "description": "OAuth client ID", + "name": "clientID", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "201": { - "description": "Created", + "204": { + "description": "No Content" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ExamplesUpdatedResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } + } + }, + "x-public": true + } + }, + "/api/v1/platform/oauth/clients": { + "get": { + "security": [ + { + "API Key": [] }, - "403": { - "description": "Forbidden", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Lists the OAuth clients owned by the caller's organization.", + "tags": [ + "oauth" + ], + "summary": "List OAuth clients", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/oauth.OAuthClientListResponse" } } } + } + }, + "x-public": true, + "parameters": [] + }, + "post": { + "security": [ + { + "API Key": [] }, - "404": { - "description": "Not Found", + { + "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/examples.ErrorResponse" + "$ref": "#/components/schemas/oauth.OAuthClientCredentialsResponse" } } } }, - "409": { - "description": "Conflict", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } }, - "422": { - "description": "Unprocessable Entity", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } @@ -30188,46 +32140,16 @@ "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/oauth.CreateOAuthClientRequest" } } } } } }, - "/v1/platform/evaluators": { + "/api/v1/platform/oauth/clients/{id}": { "get": { "security": [ { @@ -30240,103 +32162,187 @@ "Bearer Auth": [] } ], - "description": "List evaluators for the current workspace, with optional filtering by type, name, tag, feedback key, or resource ID.", "tags": [ - "evaluators" + "oauth" ], - "summary": "List evaluators", + "summary": "Get an OAuth client", "parameters": [ { - "description": "Filter by evaluator type", - "name": "type", - "in": "query", + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Type" + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.OAuthClientView" + } + } } }, - { - "description": "Filter by name substring (also searches creator names)", - "name": "name_contains", - "in": "query", - "schema": { - "type": "string", - "title": "Name Contains" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/errutil.UserError" + } + } } + } + }, + "x-public": true + }, + "delete": { + "security": [ + { + "API Key": [] }, { - "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" - } + "Tenant ID": [] }, { - "description": "Filter by feedback key", - "name": "feedback_key", - "in": "query", + "Bearer Auth": [] + } + ], + "tags": [ + "oauth" + ], + "summary": "Delete an OAuth client", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Feedback Key" + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, - { - "description": "Filter by resource IDs", - "name": "resource_id", - "in": "query", - "style": "form", - "explode": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Resource Id" + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/errutil.UserError" + } + } } + } + }, + "x-public": true + }, + "patch": { + "security": [ + { + "API Key": [] }, { - "description": "Field to sort by", - "name": "sort_by", - "in": "query", - "schema": { - "type": "string", - "title": "Sort By" - } + "Tenant ID": [] }, { - "description": "Sort in descending order", - "name": "sort_by_desc", - "in": "query", + "Bearer Auth": [] + } + ], + "tags": [ + "oauth" + ], + "summary": "Update an OAuth client", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "title": "Sort By Desc" + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.OAuthClientView" + } + } } }, - { - "description": "Maximum number of results (1-100)", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "default": 100, - "title": "Limit" + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/errutil.UserError" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/errutil.UserError" + } + } } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.UpdateOAuthClientRequest" + } + } + } + } + } + }, + "/api/v1/platform/oauth/clients/{id}/rotate-secret": { + "post": { + "security": [ + { + "API Key": [] }, { - "description": "Offset for pagination", - "name": "offset", - "in": "query", + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Generates a new client secret for a confidential client, invalidating the previous one. The new secret is shown only once.", + "tags": [ + "oauth" + ], + "summary": "Rotate an OAuth client secret", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "integer", - "default": 0, - "title": "Offset" + "type": "string" } } ], @@ -30346,27 +32352,159 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ListEvaluatorsResponse" + "$ref": "#/components/schemas/oauth.OAuthClientCredentialsResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/errutil.UserError" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/errutil.UserError" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/platform/ops/backfills/restart": { + "post": { + "security": [ + { + "API Key": [] + }, + { + "Organization 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.", + "tags": [ + "backfills" + ], + "summary": "Restart a backfill job", + "parameters": [], + "responses": { + "200": { + "description": "Backfill restarted", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "404": { + "description": "Backfill not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "400": { - "description": "Bad Request", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } + } + }, + "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": [] }, - "401": { - "description": "Unauthorized", + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Lists all access policies for the organization.", + "tags": [ + "access_policies" + ], + "summary": "List access policies", + "responses": { + "200": { + "description": "List of access policies", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/authz_internal.ListAccessPoliciesResponse" } } } @@ -30376,23 +32514,34 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/abac.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "parameters": [] }, "post": { "security": [ @@ -30400,65 +32549,75 @@ "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Create a new LLM or code evaluator for the current workspace.", + "description": "Creates a new access policy.", "tags": [ - "evaluators" + "access_policies" ], - "summary": "Create evaluator", + "summary": "Create an access policy", "parameters": [], "responses": { "201": { - "description": "Created", + "description": "Access policy created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.CreateEvaluatorResponse" + "$ref": "#/components/schemas/authz_internal.AccessPolicyCreateResponse" } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Role not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/abac.ErrorResponse" } } } @@ -30470,295 +32629,224 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.CreateEvaluatorRequest" + "$ref": "#/components/schemas/authz_internal.CreateAccessPolicyPayload" } } } } - }, - "delete": { + } + }, + "/api/v1/platform/orgs/current/access-policies/roles/{role_id}/access-policies": { + "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Delete multiple evaluators by their IDs. Returns per-item success/failure.", + "description": "Attaches one or more access policies to a specific role. The request body must contain an array of access policy IDs.", "tags": [ - "evaluators" + "access_policies" ], - "summary": "Bulk delete evaluators", + "summary": "Attach access policies to a role", "parameters": [ { - "description": "Evaluator IDs to delete", - "name": "evaluator_ids", - "in": "query", + "description": "Role ID", + "name": "role_id", + "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" } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "Access policies attached successfully" + }, + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.BulkDeleteEvaluatorsResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Role not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" + } + } + } + } } }, - "/v1/platform/evaluators/spend": { + "/api/v1/platform/orgs/current/access-policies/{access_policy_id}": { "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "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": "Gets a specific access policy by ID.", "tags": [ - "evaluators" + "access_policies" ], - "summary": "Get evaluator spend", + "summary": "Get an access policy", "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" - } - }, - { - "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", + "description": "Access Policy ID", + "name": "access_policy_id", + "in": "path", "required": true, "schema": { - "type": "string", - "title": "Period Start" + "type": "string" } } ], "responses": { "200": { - "description": "OK", + "description": "Access policy details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.GetEvaluatorSpendResponse" + "$ref": "#/components/schemas/authz_internal.AccessPolicy" } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/evaluators/{evaluator_id}": { - "get": { + }, + "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Retrieve a single evaluator by its ID.", + "description": "Deletes a specific access policy by ID.", "tags": [ - "evaluators" + "access_policies" ], - "summary": "Get evaluator", + "summary": "Delete an access policy", "parameters": [ { - "description": "Evaluator ID", - "name": "evaluator_id", + "description": "Access Policy ID", + "name": "access_policy_id", "in": "path", "required": true, "schema": { @@ -30767,218 +32855,357 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "Access policy deleted successfully" + }, + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.Evaluator" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/abac.ErrorResponse" } } } + } + }, + "x-public": true + } + }, + "/api/v1/platform/orgs/current/info": { + "get": { + "security": [ + { + "API Key": [] }, - "404": { - "description": "Not Found", + { + "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/evaluators.ErrorResponse" + "$ref": "#/components/schemas/orgs.OrganizationInfo" + } + } + } + }, + "400": { + "description": "Invalid organization ID", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-public": true - }, - "delete": { + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/orgs/current/members": { + "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "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 a paginated list of org members (active and pending) enriched with workspace memberships.", "tags": [ - "evaluators" + "orgs" ], - "summary": "Delete evaluator", + "summary": "List org members with workspace roles", "parameters": [ { - "description": "Evaluator ID", - "name": "evaluator_id", - "in": "path", - "required": true, + "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": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Name Like" + } + }, + { + "description": "Glob filter on email; use * as wildcard (repeatable, matches any)", + "name": "email_like", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "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": { + "type": "array", + "items": { + "type": "string" + }, + "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": { - "type": "string" + "type": "array", + "items": { + "type": "string" + }, + "title": "Organization Role Like" } }, { - "description": "When true, delete all run rules for this evaluator before deleting the evaluator", - "name": "delete_run_rules", + "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": "boolean", - "title": "Delete Run Rules" + "type": "array", + "items": { + "type": "string" + }, + "title": "Workspace Role Like" } } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { + "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": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "string" } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { + }, + "X-Members-List-All-Workspaces": { + "description": "true if caller has organization:manage", "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "string" + } + }, + "X-Pagination-Total": { + "description": "Total number of matching members", + "schema": { + "type": "string" } } - } - }, - "403": { - "description": "Forbidden", + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/orgs.OrgMemberEnriched" + } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "409": { - "description": "Conflict", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, "x-public": true - }, - "patch": { + } + }, + "/api/v1/platform/orgs/current/scim/tokens": { + "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Update an existing evaluator's name, LLM configuration, or code configuration.", + "description": "List all SCIM bearer tokens for the current organization. The full token values are not returned.", "tags": [ - "evaluators" - ], - "summary": "Update evaluator", - "parameters": [ - { - "description": "Evaluator ID", - "name": "evaluator_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "SCIM Tokens" ], + "summary": "List SCIM tokens", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.UpdateEvaluatorResponse" - } - } - } - }, - "400": { - "description": "Bad Request", + "description": "List of SCIM tokens", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/scim.ScimTokenResponse" + } } } } @@ -30988,83 +33215,70 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationRead permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.UpdateEvaluatorRequest" - } - } - } - } - } - }, - "/v1/platform/features": { - "get": { + "parameters": [] + }, + "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns a consolidated view of default models and disabled models per feature for the workspace.", + "description": "Create a new SCIM bearer token for the current organization. The full token value is only returned once upon creation.", "tags": [ - "features" + "SCIM Tokens" ], - "summary": "List feature configurations", + "summary": "Create a SCIM token", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created SCIM token with full token value", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/features.FeatureConfig" - } + "$ref": "#/components/schemas/scim.ScimTokenSensitiveResponse" } } } @@ -31074,58 +33288,77 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, "x-public": true, - "parameters": [] + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.CreateScimTokenPayload" + } + } + } + } } }, - "/v1/platform/features/{feature}/default-model": { - "put": { + "/api/v1/platform/orgs/current/scim/tokens/{scim_token_id}": { + "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Sets or replaces the default model for a feature in the workspace.", + "description": "Retrieve a specific SCIM token by ID for the current organization. The full token value is not returned.", "tags": [ - "features" + "SCIM Tokens" ], - "summary": "Set default model for a feature", + "summary": "Get a SCIM token", "parameters": [ { - "description": "Feature name", - "name": "feature", + "description": "SCIM Token ID", + "name": "scim_token_id", "in": "path", "required": true, "schema": { @@ -31134,15 +33367,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "SCIM token details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ScimTokenResponse" } } } @@ -31152,132 +33382,75 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", + "description": "Forbidden - requires OrganizationRead permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.UpsertDefaultModelRequest" - } - } - } - } - }, - "delete": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Removes the default model for a feature in the workspace.", - "tags": [ - "features" - ], - "summary": "Delete default model for a feature", - "parameters": [ - { - "description": "Feature name", - "name": "feature", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/features/{feature}/disabled-models": { - "put": { + }, + "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Adds a model to the disabled list for a feature in the workspace.", + "description": "Delete a SCIM bearer token from the current organization.", "tags": [ - "features" + "SCIM Tokens" ], - "summary": "Disable a model for a feature", + "summary": "Delete a SCIM token", "parameters": [ { - "description": "Feature name", - "name": "feature", + "description": "SCIM Token ID", + "name": "scim_token_id", "in": "path", "required": true, "schema": { @@ -31287,93 +33460,82 @@ ], "responses": { "204": { - "description": "No Content" + "description": "No content - token deleted successfully" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden - requires OrganizationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.DisableModelRequest" + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } } } } - } - } - }, - "/v1/platform/features/{feature}/disabled-models/{model}": { - "delete": { + }, + "x-public": true + }, + "patch": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Removes a model from the disabled list for a feature in the workspace.", + "description": "Update the description of an existing SCIM token for the current organization.", "tags": [ - "features" + "SCIM Tokens" ], - "summary": "Re-enable a disabled model for a feature", + "summary": "Update a SCIM token", "parameters": [ { - "description": "Feature name", - "name": "feature", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Model name (URL-encoded)", - "name": "model", + "description": "SCIM Token ID", + "name": "scim_token_id", "in": "path", "required": true, "schema": { @@ -31382,15 +33544,12 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "Updated SCIM token details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ScimTokenResponse" } } } @@ -31400,188 +33559,214 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "404": { + "description": "Token not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$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/gateway-policies": { + "/api/v1/platform/sessions/{sessionID}/agent-versions": { "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": "Returns all agent versions (commit SHAs) seen in the given tracing project, ordered by first_seen_at descending.", "tags": [ - "gateway-policies" + "sessions" ], - "summary": "List gateway policies", + "summary": "List agent versions for a project", "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", + "description": "Tracing project (session) UUID", + "name": "sessionID", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Subject Matcher Value" + "type": "string" } } ], "responses": { "200": { - "description": "OK", + "description": "Agent versions", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + "$ref": "#/components/schemas/tracer_sessions.AgentVersionResponse" } } } } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", + }, + "400": { + "description": "Invalid session ID", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, "x-public": true - }, - "post": { + } + }, + "/api/v1/platform/sessions/{session_id}/issues-agent": { + "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.", + "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": [ - "gateway-policies" + "issues-agent" + ], + "summary": "[Beta] Get the issues agent config for a session", + "parameters": [ + { + "description": "Tracer session ID (UUID)", + "name": "session_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/tracer_session_issues_agent.IssuesAgent" } } } }, "400": { - "description": "validation failure (bad matchers, unknown policy_type, missing required field)", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, "401": { - "description": "missing or invalid auth", + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, "403": { - "description": "LLM Gateway not enabled for the organization, or caller lacks OrganizationManage", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, - "409": { - "description": "policy name conflict", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31591,68 +33776,49 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.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, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.CreateGatewayPolicyRequest" - } - } - } - } - } - }, - "/v1/platform/gateway-policies/search": { + "x-public": true + }, "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": "**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": [ - "gateway-policies" + "issues-agent" + ], + "summary": "[Beta] Create the issues agent for a session", + "parameters": [ + { + "description": "Tracer session ID (UUID)", + "name": "session_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Search gateway policies by subject value set", - "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" - } + "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" } } } @@ -31662,7 +33828,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31672,17 +33838,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31692,7 +33868,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31704,47 +33880,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.SearchGatewayPoliciesRequest" + "$ref": "#/components/schemas/tracer_session_issues_agent.CreateIssuesAgentRequest" } } } } - } - }, - "/v1/platform/gateway-policies/{id}": { - "get": { + }, + "delete": { "security": [ { "API Key": [] }, + { + "Tenant 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": "**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": [ - "gateway-policies" + "issues-agent" ], - "summary": "Get a gateway policy", + "summary": "[Beta] Delete the issues agent for a session", "parameters": [ { - "description": "Policy ID", - "name": "id", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31754,27 +33933,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, "404": { - "description": "policy not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31784,7 +33963,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31792,62 +33971,81 @@ }, "x-public": true }, - "delete": { + "patch": { "security": [ { "API Key": [] }, + { + "Tenant 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": "**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": [ - "gateway-policies" + "issues-agent" ], - "summary": "Delete a gateway policy", + "summary": "[Beta] Update the issues agent config for a session", "parameters": [ { - "description": "Policy ID", - "name": "id", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, "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/tracer_session_issues_agent.ErrorResponse" } } } }, "404": { - "description": "policy not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31857,37 +34055,51 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$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" + } + } + } + } + } + }, + "/api/v1/platform/sessions/{session_id}/issues-agent/overview": { "patch": { "security": [ { "API Key": [] }, + { + "Tenant 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": "**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": [ - "gateway-policies" + "issues-agent" ], - "summary": "Update a gateway policy", + "summary": "[Beta] Save the agent overview for a session", "parameters": [ { - "description": "Policy ID", - "name": "id", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -31897,17 +34109,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewResponse" } } } }, "400": { - "description": "validation failure", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31917,37 +34129,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } }, "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/tracer_session_issues_agent.ErrorResponse" } } } }, "404": { - "description": "policy not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "409": { - "description": "matcher edit collides with another policy in the same family", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } @@ -31957,39 +34159,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" } } } } }, - "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/tracer_session_issues_agent.SaveOverviewRequest" } } } } } }, - "/v1/platform/hub/repos/{owner}/{repo}/directories": { - "get": { + "/api/v1/platform/sessions/{session_id}/issues-agent/webhooks/{id}/roll-secret": { + "post": { "security": [ { "API Key": [] @@ -32001,15 +34191,15 @@ "Bearer Auth": [] } ], - "description": "Resolves the flattened file tree for an agent or skill repository at a specific commit, tag, or latest.", + "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": [ - "directories" + "issues-agent" ], - "summary": "Get directory contents", + "summary": "Roll an issues agent webhook signing secret", "parameters": [ { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", + "description": "Tracer session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -32017,22 +34207,13 @@ } }, { - "description": "Repository handle", - "name": "repo", + "description": "Webhook ID (UUID)", + "name": "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": { @@ -32041,7 +34222,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/directories.GetDirectoryResponse" + "$ref": "#/components/schemas/tracer_session_issues_agent_webhooks.IssuesAgentWebhook" } } } @@ -32113,8 +34294,10 @@ } }, "x-public": true - }, - "delete": { + } + }, + "/api/v1/platform/sessions/{session_id}/issues/views": { + "get": { "security": [ { "API Key": [] @@ -32126,24 +34309,15 @@ "Bearer Auth": [] } ], - "description": "Deletes an agent or skill repository and its owned child file repositories.", + "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": [ - "directories" + "issues" ], - "summary": "Delete directory repository", + "summary": "[Beta] List viewed issues for a session", "parameters": [ { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Repository handle", - "name": "repo", + "description": "Session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -32152,57 +34326,42 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ListViewsResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -32212,10 +34371,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" } } } @@ -32224,8 +34380,8 @@ "x-public": true } }, - "/v1/platform/hub/repos/{owner}/{repo}/directories/commits": { - "post": { + "/api/v1/platform/tools": { + "get": { "security": [ { "API Key": [] @@ -32237,38 +34393,119 @@ "Bearer Auth": [] } ], - "description": "Creates a new directory commit for an agent or skill repository by applying file/link create, update, and delete operations.", + "description": "Returns a paginated list of tools in the workspace.", "tags": [ - "directories" + "tools" ], - "summary": "Create directory commit", + "summary": "List tools", "parameters": [ { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", - "in": "path", - "required": true, + "description": "Maximum number of tools to return", + "name": "limit", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "title": "Limit" } }, { - "description": "Repository handle", - "name": "repo", - "in": "path", - "required": true, + "description": "Number of tools to skip", + "name": "offset", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "title": "Offset" + } + }, + { + "description": "Search query to filter tools by name or description", + "name": "query", + "in": "query", + "schema": { + "type": "string", + "title": "Query" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ListToolsResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } } } + }, + "x-public": true + }, + "post": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } ], + "description": "Creates a new tool in the workspace.", + "tags": [ + "tools" + ], + "summary": "Create a tool", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/directories.CommitResponse" + "$ref": "#/components/schemas/tools.Tool" } } } @@ -32278,10 +34515,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32291,10 +34525,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32304,23 +34535,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32330,10 +34545,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32343,10 +34555,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32358,14 +34567,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/directories.CreateDirectoryCommitRequest" + "$ref": "#/components/schemas/tools.CreateToolPayload" } } } } } }, - "/v1/platform/issues": { + "/api/v1/platform/tools/id/{id}": { "get": { "security": [ { @@ -32378,107 +34587,19 @@ "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 tool identified by its UUID.", "tags": [ - "issues" + "tools" ], - "summary": "[Beta] List issues", + "summary": "Get a tool by ID", "parameters": [ { - "description": "Filter by session ID (UUID)", - "name": "session_id", - "in": "query", - "schema": { - "type": "string", - "title": "Session Id" - } - }, - { - "description": "Filter by session name (exact match)", - "name": "session_name", - "in": "query", - "schema": { - "type": "string", - "title": "Session Name" - } - }, - { - "description": "Filter by status", - "name": "status", - "in": "query", - "schema": { - "type": "string", - "enum": [ - "open", - "completed", - "ignored" - ], - "title": "Status" - } - }, - { - "description": "Filter by severity", - "name": "severity", - "in": "query", - "schema": { - "type": "integer", - "enum": [ - 0, - 1, - 2, - 3 - ], - "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": { - "type": "string", - "enum": [ - "created_at", - "updated_at", - "severity" - ], - "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", + "description": "Tool UUID", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "integer", - "title": "Offset" + "type": "string" } } ], @@ -32488,10 +34609,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_session_issues.Issue" - } + "$ref": "#/components/schemas/tools.Tool" } } } @@ -32501,7 +34619,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32511,7 +34629,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32521,7 +34639,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32531,17 +34659,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/issues-agent": { - "get": { + }, + "delete": { "security": [ { "API Key": [] @@ -32553,31 +34679,32 @@ "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": "Deletes a tool identified by its UUID.", "tags": [ - "issues-agent" + "tools" ], - "summary": "[Beta] List issues agent configs", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" - } - } - } + "summary": "Delete a tool by ID", + "parameters": [ + { + "description": "Tool UUID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32587,7 +34714,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32597,7 +34724,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32607,18 +34744,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-public": true, - "parameters": [] - } - }, - "/v1/platform/issues/{id}": { - "get": { + "x-public": true + }, + "patch": { "security": [ { "API Key": [] @@ -32630,14 +34764,14 @@ "Bearer Auth": [] } ], - "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns one issue for the authenticated tenant.", + "description": "Updates an existing tool identified by its UUID.", "tags": [ - "issues" + "tools" ], - "summary": "[Beta] Get issue", + "summary": "Update a tool by ID", "parameters": [ { - "description": "Issue ID (UUID)", + "description": "Tool UUID", "name": "id", "in": "path", "required": true, @@ -32652,7 +34786,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.Issue" + "$ref": "#/components/schemas/tools.Tool" } } } @@ -32662,7 +34796,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32672,7 +34806,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32682,7 +34816,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32692,7 +34826,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32702,17 +34836,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.UpdateToolPayload" + } + } + } + } } }, - "/v1/platform/issues/{id}/fix-verdict": { - "post": { + "/api/v1/platform/tools/{handle}": { + "get": { "security": [ { "API Key": [] @@ -32724,15 +34868,15 @@ "Bearer Auth": [] } ], - "description": "Records whether a fix resolved the issue when replayed against its preview deployment.", + "description": "Returns a tool identified by its handle.", "tags": [ - "issues" + "tools" ], - "summary": "Record a fix-verification verdict", + "summary": "Get a tool by handle", "parameters": [ { - "description": "Issue ID", - "name": "id", + "description": "Tool handle", + "name": "handle", "in": "path", "required": true, "schema": { @@ -32746,7 +34890,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.FixVerification" + "$ref": "#/components/schemas/tools.Tool" } } } @@ -32756,101 +34900,55 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues.RecordFixVerdictRequest" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } } } - } - } - } - }, - "/v1/platform/issues/{id}/start-preview": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "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", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.StartPreviewResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues.StartPreviewRequest" - } - } - } - } - } - }, - "/v1/platform/issues/{id}/views": { - "post": { + "x-public": true + }, + "delete": { "security": [ { "API Key": [] @@ -32862,15 +34960,15 @@ "Bearer Auth": [] } ], - "description": "**Beta:** Records that the current user opened this issue.\nIdempotent. Drives the Engine tab unread-issues badge.", + "description": "Deletes a tool identified by its handle.", "tags": [ - "issues" + "tools" ], - "summary": "[Beta] Mark issue viewed", + "summary": "Delete a tool by handle", "parameters": [ { - "description": "Issue ID (UUID)", - "name": "id", + "description": "Tool handle", + "name": "handle", "in": "path", "required": true, "schema": { @@ -32887,7 +34985,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32897,7 +34995,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32907,7 +35005,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32917,7 +35015,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32927,17 +35025,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/mcp-vendors": { - "get": { + }, + "patch": { "security": [ { "API Key": [] @@ -32949,18 +35045,39 @@ "Bearer Auth": [] } ], - "description": "Returns the catalog of available MCP vendors.", + "description": "Updates an existing tool identified by its handle.", "tags": [ - "mcp_vendors" + "tools" + ], + "summary": "Update a tool by handle", + "parameters": [ + { + "description": "Tool handle", + "name": "handle", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "List MCP vendors", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListMcpVendorsResponse" + "$ref": "#/components/schemas/tools.Tool" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32970,7 +35087,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -32980,38 +35097,56 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, "x-public": true, - "parameters": [] + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.UpdateToolPayload" + } + } + } + } } }, - "/v1/platform/mcp-vendors/{vendor_slug}": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Returns vendor metadata and current settings.", + "/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": [ - "mcp_vendors" + "datasets" ], - "summary": "Get MCP vendor", + "summary": "Fetch shared experiment runs for dataset examples", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Dataset share token", + "name": "share_token", "in": "path", "required": true, "schema": { @@ -33025,67 +35160,96 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.GetMcpVendorResponse" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "502": { + "description": "Bad Gateway", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" + } + } + } + } } }, - "/v1/platform/mcp-vendors/{vendor_slug}/account": { - "get": { + "/api/v2/datasets/{dataset_id}/experiment-runs": { + "post": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Resolves OAuth token and returns the vendor's account info.", + "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": [ - "mcp_vendors" + "datasets" ], - "summary": "Get vendor account", + "summary": "Fetch experiment runs for dataset examples", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Dataset ID", + "name": "dataset_id", "in": "path", "required": true, "schema": { @@ -33099,7 +35263,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountResponseList" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" } } } @@ -33109,7 +35273,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -33119,7 +35283,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -33129,17 +35293,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -33149,59 +35323,85 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" + } + } + } + } } }, - "/v1/platform/mcp-vendors/{vendor_slug}/mcp-servers": { + "/api/v2/public/{share_token}/run/{run_id}": { "get": { - "security": [ + "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": [ + "runs" + ], + "summary": "Get a public shared trace run", + "parameters": [ { - "API Key": [] + "description": "application/json", + "name": "Accept", + "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": "Returns the MCP gateways from the vendor for the workspace's configured org/project.", - "tags": [ - "mcp_vendors" - ], - "summary": "List MCP servers for a vendor", - "parameters": [ - { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Run UUID", + "name": "run_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "description": "Max items to return (default 100)", - "name": "limit", + "description": "Run start_time coordinate (RFC3339)", + "name": "start_time", "in": "query", + "required": true, "schema": { - "type": "integer", - "title": "Limit" + "type": "string", + "format": "date-time", + "title": "Start Time" } }, { - "description": "Number of items to skip (default 0)", - "name": "offset", + "description": "repeatable public run fields to include", + "name": "selects", "in": "query", + "required": true, + "style": "form", + "explode": true, "schema": { - "type": "integer", - "title": "Offset" + "type": "array", + "items": { + "type": "string" + }, + "title": "Selects" } } ], @@ -33211,57 +35411,67 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListMcpGatewaysResponse" + "$ref": "#/components/schemas/query.RunResponse" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (missing or malformed start_time)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "share token or run not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.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/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "502": { - "description": "Bad Gateway", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -33270,32 +35480,38 @@ "x-public": true } }, - "/v1/platform/mcp-vendors/{vendor_slug}/settings": { - "get": { - "security": [ + "/api/v2/public/{share_token}/runs/query": { + "post": { + "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": "Returns the current vendor-specific settings.", - "tags": [ - "mcp_vendors" - ], - "summary": "Get vendor settings", - "parameters": [ - { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -33305,119 +35521,67 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/query.QueryTraceResponseBody" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "bad request (malformed JSON or invalid parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" - } - } - } - } - }, - "x-public": true - }, - "put": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Replaces vendor settings.", - "tags": [ - "mcp_vendors" - ], - "summary": "Replace vendor settings", - "parameters": [ - { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", + "description": "share token or shared trace not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "501": { + "description": "no V2 backend configured and no V1 proxy fallback", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "504": { + "description": "gateway timeout or deadline exceeded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -33429,97 +35593,135 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + "$ref": "#/components/schemas/query.PublicSharedTraceRunsRequestBody" } } } } - }, + } + }, + "/api/v2/runs/query": { "post": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Initializes vendor settings.", + "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": [ - "mcp_vendors" + "runs" ], - "summary": "Create vendor settings", + "summary": "Query runs", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", - "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": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/query.QueryRunsResponseBody" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "Conflict", + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$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" } } } @@ -33531,37 +35733,129 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + "$ref": "#/components/schemas/query.QueryRunsRequestBody" } } } } - }, - "delete": { + } + }, + "/api/v2/runs/{run_id}": { + "get": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Removes vendor settings.", + "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": [ - "mcp_vendors" + "runs" ], - "summary": "Delete vendor settings", + "summary": "Get a single run", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "application/json", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } + }, + { + "description": "Run UUID", + "name": "run_id", "in": "path", "required": true, "schema": { - "type": "string" + "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": { + "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": { + "type": "string", + "format": "date-time", + "title": "Start Time" } } ], @@ -33571,129 +35865,97 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$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": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "run or session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "x-public": true - } - }, - "/v1/platform/mcp-vendors/{vendor_slug}/tools": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Returns the tool catalog for this vendor.", - "tags": [ - "mcp_vendors" - ], - "summary": "List tools for a vendor", - "parameters": [ - { - "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" + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } } }, - { - "description": "Number of tools to skip (default 0)", - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "title": "Offset" - } - } - ], - "responses": { - "200": { - "description": "OK", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListVendorToolsResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "501": { + "description": "not implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "504": { + "description": "gateway timeout or deadline exceeded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -33702,48 +35964,63 @@ "x-public": true } }, - "/v1/platform/ops/backfills/restart": { + "/api/v2/runs/{run_id}/share": { "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": "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": [ - "backfills" + "runs" + ], + "summary": "Share a run", + "parameters": [ + { + "description": "Run UUID", + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } ], - "summary": "Restart a backfill job", - "parameters": [], "responses": { "200": { - "description": "Backfill restarted", + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/share.CreateShareTokenResponseBody" } } } }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -33753,36 +36030,37 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Backfill not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "413": { + "description": "Request Entity Too Large", + "content": { + "application/json": { + "schema": { + "$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" } } } @@ -33794,248 +36072,206 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/backfills.restartBackfillRequest" + "$ref": "#/components/schemas/share.CreateShareTokenRequestBody" } } } } } }, - "/v1/platform/orgs/current/access-policies": { + "/api/v2/runs/{run_id}/url": { "get": { "security": [ { - "API Key": [] - }, - { - "Organization ID": [] + "API Key": [], + "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Lists all access policies for the organization.", + "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": [ - "access_policies" + "runs" ], - "summary": "List access policies", - "responses": { - "200": { - "description": "List of access policies", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/authz_internal.ListAccessPoliciesResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" - } - } + "summary": "Get the LangSmith UI URL for a run", + "parameters": [ + { + "description": "Run UUID", + "name": "run_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "503": { - "description": "Service unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" - } - } - } - } - }, - "x-public": true, - "parameters": [] - }, - "post": { - "security": [ { - "API Key": [] + "description": "Project (session) UUID", + "name": "project_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Project Id" + } }, { - "Organization ID": [] + "description": "Trace UUID", + "name": "trace_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Trace Id" + } }, { - "Bearer Auth": [] + "description": "Run start time in RFC3339 format; omit if unknown", + "name": "start_time", + "in": "query", + "schema": { + "type": "string", + "title": "Start Time" + } } ], - "description": "Creates a new access policy.", - "tags": [ - "access_policies" - ], - "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/query.RunURLResponse" } } } }, "400": { - "description": "Bad request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", + "description": "missing or invalid query parameters", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Role not found", + "401": { + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "403": { + "description": "forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "404": { + "description": "project not found or does not belong to this workspace", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/authz_internal.CreateAccessPolicyPayload" - } - } - } - } + "x-public": true } }, - "/v1/platform/orgs/current/access-policies/roles/{role_id}/access-policies": { - "post": { + "/api/v2/runs/{trace_id}/share": { + "delete": { "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": "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": [ - "access_policies" + "runs" ], - "summary": "Attach access policies to a role", + "summary": "Unshare a run", "parameters": [ { - "description": "Role ID", - "name": "role_id", + "description": "Trace root UUID", + "name": "trace_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "204": { - "description": "Access policies attached successfully" + "description": "No Content" }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Role not found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "413": { + "description": "Request Entity Too Large", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -34047,59 +36283,134 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" + "$ref": "#/components/schemas/share.DeleteShareTokenRequestBody" } } } } } }, - "/v1/platform/orgs/current/access-policies/{access_policy_id}": { + "/api/v2/sandboxes/boxes": { "get": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Gets a specific access policy by ID.", + "description": "List sandboxes for the authenticated tenant, with optional filtering, sorting, and pagination.", "tags": [ - "access_policies" + "sandboxes" ], - "summary": "Get an access policy", + "summary": "List sandboxes", "parameters": [ { - "description": "Access Policy ID", - "name": "access_policy_id", - "in": "path", - "required": true, + "description": "Maximum number of results", + "name": "limit", + "in": "query", "schema": { - "type": "string" + "default": 50, + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Pagination offset", + "name": "offset", + "in": "query", + "schema": { + "default": 0, + "type": "integer", + "title": "Offset" + } + }, + { + "description": "Filter by name substring", + "name": "name_contains", + "in": "query", + "schema": { + "type": "string", + "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": { + "default": "created_at", + "type": "string", + "title": "Sort By" + } + }, + { + "description": "Sort direction (asc, desc)", + "name": "sort_direction", + "in": "query", + "schema": { + "default": "desc", + "type": "string", + "title": "Sort Direction" } } ], "responses": { "200": { - "description": "Access policy details", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.AccessPolicy" + "$ref": "#/components/schemas/sandboxes.SandboxListResponse" } } } }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -34109,37 +36420,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" - } - } - } - }, - "404": { - "description": "Access policy not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.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/sandboxes.ErrorResponse" } } } @@ -34147,499 +36438,388 @@ }, "x-public": true }, - "delete": { + "post": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Deletes a specific access policy by ID.", + "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": [ - "access_policies" - ], - "summary": "Delete an access policy", - "parameters": [ - { - "description": "Access Policy ID", - "name": "access_policy_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "sandboxes" ], + "summary": "Create a sandbox", + "parameters": [], "responses": { - "204": { - "description": "Access policy deleted successfully" + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.SandboxResponse" + } + } + } }, "400": { - "description": "Bad request", + "description": "Snapshot not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "409": { + "description": "Name already exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "422": { + "description": "Validation error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "429": { + "description": "Quota exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal server error", + "description": "Sandbox creation failed or internal error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "504": { + "description": "Sandbox did not become ready in time", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.CreateSandboxPayload" + } + } + } + } } }, - "/v1/platform/orgs/current/info": { - "get": { + "/api/v2/sandboxes/boxes/batch-delete": { + "post": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns organization info for the authenticated user's current organization.", + "description": "Delete multiple sandboxes by name or UUID in a single request.", "tags": [ - "Organizations" + "sandboxes" ], - "summary": "Get current organization info", + "summary": "Batch delete sandboxes", + "parameters": [], "responses": { "200": { - "description": "Organization info", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/orgs.OrganizationInfo" + "$ref": "#/components/schemas/sandboxes.BatchDeleteResponse" } } } }, "400": { - "description": "Invalid organization ID", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true, - "parameters": [] + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.BatchDeleteRequest" + } + } + } + } } }, - "/v1/platform/orgs/current/members": { + "/api/v2/sandboxes/boxes/{name}": { "get": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Returns a paginated list of org members (active and pending) enriched with workspace memberships.", + "description": "Retrieve a sandbox by name. Stale provisioning sandboxes are auto-failed.", "tags": [ - "orgs" + "sandboxes" ], - "summary": "List org members with workspace roles", + "summary": "Get a sandbox", "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": "Sandbox display name", + "name": "name", + "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", - "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/orgs.OrgMemberEnriched" - } - } - } - } - }, - "400": { - "description": "Bad request", + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/orgs/current/scim/tokens": { - "get": { + }, + "delete": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "List all SCIM bearer tokens for the current organization. The full token values are not returned.", + "description": "Delete a sandbox by name or UUID. Tears down the sandbox runtime and removes the DB record.", "tags": [ - "SCIM Tokens" + "sandboxes" ], - "summary": "List SCIM tokens", - "responses": { - "200": { - "description": "List of SCIM tokens", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" - } - } + "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" }, - "403": { - "description": "Forbidden - requires OrganizationRead permission", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true, - "parameters": [] + "x-public": true }, - "post": { + "patch": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Create a new SCIM bearer token for the current organization. The full token value is only returned once upon creation.", + "description": "Update a sandbox's display name. The name must be unique within the tenant.", "tags": [ - "SCIM Tokens" + "sandboxes" + ], + "summary": "Update a sandbox", + "parameters": [ + { + "description": "Current sandbox display name", + "name": "name", + "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/sandboxes.SandboxResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden - requires OrganizationManage permission", + "409": { + "description": "Name already exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "422": { + "description": "Validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -34651,35 +36831,35 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.CreateScimTokenPayload" + "$ref": "#/components/schemas/sandboxes.UpdateSandboxPayload" } } } } } }, - "/v1/platform/orgs/current/scim/tokens/{scim_token_id}": { - "get": { + "/api/v2/sandboxes/boxes/{name}/service-url": { + "post": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Retrieve a specific SCIM token by ID for the current organization. The full token value is not returned.", + "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": [ - "SCIM Tokens" + "sandboxes" ], - "summary": "Get a SCIM token", + "summary": "Generate a service access token", "parameters": [ { - "description": "SCIM Token ID", - "name": "scim_token_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -34689,89 +36869,101 @@ ], "responses": { "200": { - "description": "SCIM token details", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" + "$ref": "#/components/schemas/sandboxes.ServiceURLResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden - requires OrganizationRead permission", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Token not found", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.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": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Delete a SCIM bearer token from the current organization.", + "description": "Create a snapshot by capturing the current state of a sandbox or promoting an existing checkpoint.", "tags": [ - "SCIM Tokens" + "sandboxes" ], - "summary": "Delete a SCIM token", + "summary": "Capture a snapshot from a sandbox", "parameters": [ { - "description": "SCIM Token ID", - "name": "scim_token_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -34780,83 +36972,102 @@ } ], "responses": { - "204": { - "description": "No content - token deleted successfully" + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + } + } + } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "403": { - "description": "Forbidden - requires OrganizationManage permission", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "Token not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "503": { - "description": "Service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.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": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Update the description of an existing SCIM token for the current organization.", + "description": "Start a stopped or failed sandbox. This endpoint is not idempotent.", "tags": [ - "SCIM Tokens" + "sandboxes" ], - "summary": "Update a SCIM token", + "summary": "Start a sandbox", "parameters": [ { - "description": "SCIM Token ID", - "name": "scim_token_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -34865,81 +37076,61 @@ } ], "responses": { - "200": { - "description": "Updated SCIM token details", + "202": { + "description": "Accepted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "403": { - "description": "Forbidden - requires OrganizationManage permission", + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "Token not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.UpdateScimTokenPayload" - } - } - } - } + "x-public": true } }, - "/v1/platform/sessions/{sessionID}/agent-versions": { + "/api/v2/sandboxes/boxes/{name}/status": { "get": { "security": [ { @@ -34950,17 +37141,20 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Returns all agent versions (commit SHAs) seen in the given tracing project, ordered by first_seen_at descending.", + "description": "Retrieve the lightweight status of a sandbox for polling.", "tags": [ - "sessions" + "sandboxes" ], - "summary": "List agent versions for a project", + "summary": "Get sandbox status", "parameters": [ { - "description": "Tracing project (session) UUID", - "name": "sessionID", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -34970,40 +37164,31 @@ ], "responses": { "200": { - "description": "Agent versions", + "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_sessions.AgentVersionResponse" - } + "$ref": "#/components/schemas/sandboxes.SandboxStatusResponse" } } } }, - "400": { - "description": "Invalid session ID", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35012,8 +37197,8 @@ "x-public": true } }, - "/v1/platform/sessions/{session_id}/issues-agent": { - "get": { + "/api/v2/sandboxes/boxes/{name}/stop": { + "post": { "security": [ { "API Key": [] @@ -35025,15 +37210,15 @@ "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.", + "description": "Stop a ready sandbox. This endpoint is not idempotent; the filesystem is preserved for later restart.", "tags": [ - "issues-agent" + "sandboxes" ], - "summary": "[Beta] Get the issues agent config for a session", + "summary": "Stop a sandbox", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -35042,32 +37227,15 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" - } - } - } + "204": { + "description": "Sandbox stopped" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35077,7 +37245,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35087,7 +37255,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35097,15 +37265,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - }, - "post": { + } + }, + "/api/v2/sandboxes/registries": { + "get": { "security": [ { "API Key": [] @@ -35117,29 +37287,47 @@ "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.", + "description": "List sandbox registries for pulling private images.", "tags": [ - "issues-agent" + "sandboxes" ], - "summary": "[Beta] Create the issues agent for a session", + "summary": "List registries", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", - "in": "path", - "required": true, + "description": "Maximum number of registries to return", + "name": "limit", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Number of registries to skip", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" + } + }, + { + "description": "Filter to registries whose name contains this substring", + "name": "name_contains", + "in": "query", + "schema": { + "type": "string", + "title": "Name Contains" } } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + "$ref": "#/components/schemas/sandboxes.RegistryListResponse" } } } @@ -35149,17 +37337,69 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + } + }, + "x-public": true + }, + "post": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Create a sandbox registry for pulling private images.", + "tags": [ + "sandboxes" + ], + "summary": "Create a registry", + "parameters": [], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.RegistryResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35169,7 +37409,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35179,7 +37419,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35189,7 +37429,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35201,13 +37441,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.CreateIssuesAgentRequest" + "$ref": "#/components/schemas/sandboxes.CreateRegistryPayload" } } } } - }, - "delete": { + } + }, + "/api/v2/sandboxes/registries/{name}": { + "get": { "security": [ { "API Key": [] @@ -35219,15 +37461,15 @@ "Bearer Auth": [] } ], - "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": "Get a sandbox registry by name.", "tags": [ - "issues-agent" + "sandboxes" ], - "summary": "[Beta] Delete the issues agent for a session", + "summary": "Get a registry", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "Registry name", + "name": "name", "in": "path", "required": true, "schema": { @@ -35236,35 +37478,87 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.RegistryResponse" + } + } + } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } + } + }, + "x-public": true + }, + "delete": { + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Delete a sandbox registry by name.", + "tags": [ + "sandboxes" + ], + "summary": "Delete a registry", + "parameters": [ + { + "description": "Registry name", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "No Content" }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35274,7 +37568,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35284,7 +37578,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35304,15 +37598,15 @@ "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.", + "description": "Update a sandbox registry's name and/or credentials.", "tags": [ - "issues-agent" + "sandboxes" ], - "summary": "[Beta] Update the issues agent config for a session", + "summary": "Update a registry", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "Registry name", + "name": "name", "in": "path", "required": true, "schema": { @@ -35326,7 +37620,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + "$ref": "#/components/schemas/sandboxes.RegistryResponse" } } } @@ -35336,37 +37630,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35376,7 +37670,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35388,15 +37682,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.UpdateIssuesAgentRequest" + "$ref": "#/components/schemas/sandboxes.UpdateRegistryPayload" } } } } } }, - "/v1/platform/sessions/{session_id}/issues-agent/overview": { - "patch": { + "/api/v2/sandboxes/snapshots": { + "get": { "security": [ { "API Key": [] @@ -35408,49 +37702,111 @@ "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": "List sandbox snapshots for the authenticated tenant, with optional filtering, sorting, and pagination.", "tags": [ - "issues-agent" + "sandboxes" ], - "summary": "[Beta] Save the agent overview for a session", + "summary": "List snapshots", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", - "in": "path", - "required": true, + "description": "Maximum number of results", + "name": "limit", + "in": "query", "schema": { - "type": "string" + "default": 50, + "type": "integer", + "title": "Limit" } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewResponse" - } - } + }, + { + "description": "Pagination offset", + "name": "offset", + "in": "query", + "schema": { + "default": 0, + "type": "integer", + "title": "Offset" } }, - "400": { - "description": "Bad Request", + { + "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": "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": { + "default": "created_at", + "type": "string", + "title": "Sort By" + } + }, + { + "description": "Sort direction (asc, desc)", + "name": "sort_direction", + "in": "query", + "schema": { + "default": "desc", + "type": "string", + "title": "Sort Direction" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotListResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35460,17 +37816,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35480,26 +37826,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewRequest" - } - } - } - } - } - }, - "/v1/platform/sessions/{session_id}/issues-agent/webhooks/{id}/roll-secret": { + "x-public": true + }, "post": { "security": [ { @@ -35512,38 +37846,19 @@ "Bearer Auth": [] } ], - "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": "Create a snapshot from a Docker image (async build).", "tags": [ - "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" - } - } + "sandboxes" ], + "summary": "Create a snapshot", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent_webhooks.IssuesAgentWebhook" + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" } } } @@ -35553,23 +37868,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35579,23 +37878,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35605,19 +37888,26 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.CreateSnapshotPayload" + } + } + } + } } }, - "/v1/platform/sessions/{session_id}/issues/views": { + "/api/v2/sandboxes/snapshots/{snapshot_id}": { "get": { "security": [ { @@ -35630,15 +37920,15 @@ "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": "Get a sandbox snapshot by ID.", "tags": [ - "issues" + "sandboxes" ], - "summary": "[Beta] List viewed issues for a session", + "summary": "Get a snapshot", "parameters": [ { - "description": "Session ID (UUID)", - "name": "session_id", + "description": "Snapshot UUID", + "name": "snapshot_id", "in": "path", "required": true, "schema": { @@ -35652,7 +37942,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ListViewsResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" } } } @@ -35662,27 +37952,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35692,17 +37982,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - } - }, - "/v1/platform/tools": { - "get": { + }, + "delete": { "security": [ { "API Key": [] @@ -35714,77 +38002,52 @@ "Bearer Auth": [] } ], - "description": "Returns a paginated list of tools in the workspace.", + "description": "Delete a snapshot by ID. The underlying storage is reclaimed asynchronously.", "tags": [ - "tools" + "sandboxes" ], - "summary": "List tools", + "summary": "Delete a snapshot", "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", + "description": "Snapshot UUID", + "name": "snapshot_id", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Query" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ListToolsResponse" - } - } - } + "204": { + "description": "Snapshot deleted" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35794,15 +38057,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - }, - "post": { + } + }, + "/api/v2/sandboxes/usage": { + "get": { "security": [ { "API Key": [] @@ -35812,61 +38077,23 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Creates a new tool in the workspace.", + "description": "Get current sandbox resource usage and quota limits for the workspace", "tags": [ - "tools" + "sandboxes" ], - "summary": "Create a tool", - "parameters": [], + "summary": "Get sandbox resource usage", "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.Tool" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.UsageResponse" } } } @@ -35876,26 +38103,17 @@ "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.CreateToolPayload" - } - } - } - } + "parameters": [] } }, - "/v1/platform/tools/id/{id}": { + "/api/v2/sandboxes/{sandbox_id}/download": { "get": { "security": [ { @@ -35908,49 +38126,42 @@ "Bearer Auth": [] } ], - "description": "Returns a tool identified by its UUID.", + "description": "Download file contents from a sandbox filesystem path.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Get a tool by ID", + "summary": "Download a sandbox file", "parameters": [ { - "description": "Tool UUID", - "name": "id", + "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/tools.Tool" - } - } - } + "description": "File content" }, "400": { "description": "Bad Request", "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,7 +38171,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35970,7 +38181,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -35980,15 +38191,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - }, - "delete": { + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute": { + "post": { "security": [ { "API Key": [] @@ -36000,15 +38213,15 @@ "Bearer Auth": [] } ], - "description": "Deletes a tool identified by its UUID.", + "description": "Execute a command inside a sandbox and return stdout, stderr, and exit code.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Delete a tool by ID", + "summary": "Execute a sandbox command", "parameters": [ { - "description": "Tool UUID", - "name": "id", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -36017,25 +38230,22 @@ } ], "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.ExecResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36045,7 +38255,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36055,7 +38265,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36065,15 +38275,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.ExecRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute/stream/resume": { + "post": { "security": [ { "API Key": [] @@ -36085,15 +38307,15 @@ "Bearer Auth": [] } ], - "description": "Updates an existing tool identified by its UUID.", + "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": [ - "tools" + "sandboxes" ], - "summary": "Update a tool by ID", + "summary": "Resume a streamed sandbox command", "parameters": [ { - "description": "Tool UUID", - "name": "id", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -36103,11 +38325,11 @@ ], "responses": { "200": { - "description": "OK", + "description": "SSE event stream", "content": { - "application/json": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "type": "string" } } } @@ -36117,37 +38339,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36157,7 +38379,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36169,15 +38391,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.UpdateToolPayload" + "$ref": "#/components/schemas/sandboxes.ExecStreamResumeRequest" } } } } } }, - "/v1/platform/tools/{handle}": { - "get": { + "/api/v2/sandboxes/{sandbox_id}/execute/stream/start": { + "post": { "security": [ { "API Key": [] @@ -36189,15 +38411,15 @@ "Bearer Auth": [] } ], - "description": "Returns a tool identified by its handle.", + "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": [ - "tools" + "sandboxes" ], - "summary": "Get a tool by handle", + "summary": "Start a streamed sandbox command", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -36207,11 +38429,11 @@ ], "responses": { "200": { - "description": "OK", + "description": "SSE event stream", "content": { - "application/json": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "type": "string" } } } @@ -36221,37 +38443,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36261,15 +38483,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.ExecStreamRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute/ws": { + "get": { "security": [ { "API Key": [] @@ -36281,15 +38515,15 @@ "Bearer Auth": [] } ], - "description": "Deletes a tool identified by its handle.", + "description": "Open a WebSocket connection for streaming command execution inside a sandbox.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Delete a tool by handle", + "summary": "Execute a sandbox command over WebSocket", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -36298,25 +38532,15 @@ } ], "responses": { - "204": { - "description": "No Content" + "101": { + "description": "WebSocket upgrade" }, "400": { "description": "Bad Request", "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" } } } @@ -36326,7 +38550,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36336,7 +38560,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36346,15 +38570,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, "x-public": true - }, - "patch": { + } + }, + "/api/v2/sandboxes/{sandbox_id}/glob": { + "post": { "security": [ { "API Key": [] @@ -36366,15 +38592,15 @@ "Bearer Auth": [] } ], - "description": "Updates an existing tool identified by its handle.", + "description": "Find files under a root path matching a glob pattern (supports **). Entries are returned in lexical order by path.", "tags": [ - "tools" + "sandboxes" ], - "summary": "Update a tool by handle", + "summary": "Glob a sandbox filesystem", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -36388,7 +38614,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "$ref": "#/components/schemas/sandboxes.GlobResponse" } } } @@ -36398,17 +38624,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 +38634,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36428,7 +38644,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36438,7 +38654,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36450,24 +38666,35 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.UpdateToolPayload" + "$ref": "#/components/schemas/sandboxes.GlobRequest" } } } } } }, - "/v2/datasets/public/{share_token}/experiment-runs": { + "/api/v2/sandboxes/{sandbox_id}/grep": { "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.", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "description": "Search files under a root path for a literal text pattern (not a regex).", "tags": [ - "datasets" + "sandboxes" ], - "summary": "Fetch shared experiment runs for dataset examples", + "summary": "Grep a sandbox filesystem", "parameters": [ { - "description": "Dataset share token", - "name": "share_token", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -36481,7 +38708,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" + "$ref": "#/components/schemas/sandboxes.GrepResponse" } } } @@ -36491,7 +38718,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36501,17 +38728,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" } } } @@ -36521,17 +38748,7 @@ "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" } } } @@ -36543,68 +38760,60 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" + "$ref": "#/components/schemas/sandboxes.GrepRequest" } } } } } }, - "/v2/datasets/{dataset_id}/experiment-runs": { - "post": { + "/api/v2/sandboxes/{sandbox_id}/tunnel": { + "get": { "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": "Open a WebSocket tunnel to a specific port inside a sandbox.", "tags": [ - "datasets" + "sandboxes" ], - "summary": "Fetch experiment runs for dataset examples", + "summary": "Open a sandbox TCP tunnel", "parameters": [ { - "description": "Dataset ID", - "name": "dataset_id", + "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": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" - } - } - } + "101": { + "description": "WebSocket upgrade" }, "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 +38823,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 +38843,51 @@ "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}": { - "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.", - "tags": [ - "runs" - ], - "summary": "Get a public shared trace run", - "parameters": [ + "/api/v2/sandboxes/{sandbox_id}/upload": { + "post": { + "security": [ { - "description": "application/json", - "name": "Accept", - "in": "header", - "schema": { - "type": "string" - } + "API Key": [] }, { - "description": "Share token UUID", - "name": "share_token", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "Tenant ID": [] }, { - "description": "Run UUID", - "name": "run_id", + "Bearer Auth": [] + } + ], + "description": "Upload a file to a sandbox filesystem path.", + "tags": [ + "sandboxes" + ], + "summary": "Upload a sandbox file", + "parameters": [ + { + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "description": "Run start_time coordinate (RFC3339)", - "name": "start_time", + "description": "Destination file path", + "name": "path", "in": "query", "required": true, "schema": { "type": "string", - "format": "date-time", - "title": "Start Time" - } - }, - { - "description": "repeatable public run fields to include", - "name": "selects", - "in": "query", - "required": true, - "style": "form", - "explode": true, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Selects" + "title": "Path" } } ], @@ -36732,107 +38897,100 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.RunResponse" + "$ref": "#/components/schemas/sandboxes.UploadResponse" } } } }, "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", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "503": { - "description": "service unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } - }, - "504": { - "description": "gateway timeout or deadline exceeded", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } + } + }, + "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" + ] } } } - }, - "x-public": true + } } }, - "/v2/public/{share_token}/runs/v2/query": { + "/api/v2/threads/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": [ - { - "description": "application/json", - "name": "Accept", - "in": "header", - "schema": { - "type": "string" - } - }, + "security": [ { - "description": "application/json", - "name": "Content-Type", - "in": "header", - "schema": { - "type": "string" - } + "API Key": [], + "Tenant ID": [] }, { - "description": "Share token UUID", - "name": "share_token", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } + "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": "OK", + "description": "items and pagination", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.QueryTraceResponseBody" + "$ref": "#/components/schemas/threads.QueryThreadsResponseBody" } } } @@ -36847,8 +39005,38 @@ } } }, + "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": "share token or shared trace not found", + "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": { @@ -36894,15 +39082,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.PublicSharedTraceRunsRequestBody" + "$ref": "#/components/schemas/threads.QueryThreadsRequestBody" } } } } } }, - "/v2/runs/query": { - "post": { + "/api/v2/threads/{thread_id}/stats": { + "get": { "security": [ { "API Key": [], @@ -36913,42 +39101,93 @@ "Tenant ID": [] } ], - "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": "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": [ - "runs" + "threads" ], - "summary": "Query runs", + "summary": "Query Single Thread Stats", "parameters": [ { - "description": "application/json", - "name": "Accept", - "in": "header", + "description": "Thread ID", + "name": "thread_id", + "in": "path", + "required": true, "schema": { "type": "string" } }, { - "description": "application/json (required for JSON body)", - "name": "Content-Type", - "in": "header", + "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" + "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": { + "type": "string", + "format": "uuid", + "title": "Session Id" } } ], "responses": { "200": { - "description": "OK", + "description": "aggregate stats for the thread", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.QueryRunsResponseBody" + "$ref": "#/components/schemas/threads.QuerySingleThreadStatsResponseBody" } } } }, "400": { - "description": "bad request (malformed JSON or invalid parameters)", + "description": "bad request (missing or invalid query parameters)", "content": { "application/json": { "schema": { @@ -36988,7 +39227,7 @@ } }, "422": { - "description": "unprocessable entity (e.g. invalid UUID)", + "description": "unprocessable entity (e.g. invalid project UUID)", "content": { "application/json": { "schema": { @@ -37028,20 +39267,10 @@ } } }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/query.QueryRunsRequestBody" - } - } - } - } + "x-public": true } }, - "/v2/runs/{run_id}": { + "/api/v2/threads/{thread_id}/traces": { "get": { "security": [ { @@ -37053,32 +39282,54 @@ "Tenant ID": [] } ], - "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": "Retrieve all traces belonging to a specific thread within a project.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "runs" + "threads" ], - "summary": "Get a single run", + "summary": "Query Thread Traces", "parameters": [ { - "description": "application/json", - "name": "Accept", - "in": "header", + "description": "Thread ID", + "name": "thread_id", + "in": "path", + "required": true, "schema": { "type": "string" } }, { - "description": "Run UUID", - "name": "run_id", - "in": "path", - "required": true, + "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", - "format": "uuid" + "title": "Cursor" } }, { - "description": "`project_id` is the UUID of the tracing project that owns the run.", + "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": { + "default": 20, + "type": "integer", + "maximum": 100, + "minimum": 1, + "title": "Page Size" + } + }, + { + "description": "`project_id` is the tracing project UUID (required).", "name": "project_id", "in": "query", "required": true, @@ -37089,84 +39340,57 @@ } }, { - "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.", + "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": [ - "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", + "TRACE_ID", + "OP", "PROMPT_TOKENS", "COMPLETION_TOKENS", - "TOTAL_COST", + "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", - "PRICE_MODEL_ID", - "TAGS", - "APP_PATH", - "ATTACHMENTS", - "THREAD_EVALUATION_TIME", - "IS_IN_DATASET", - "SHARE_URL", - "FEEDBACK_STATS" + "NAME", + "ERROR_PREVIEW" ], "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" - } } ], "responses": { "200": { - "description": "OK", + "description": "items and pagination", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/query.RunResponse" + "$ref": "#/components/schemas/threads.QueryThreadTracesResponseBody" } } } @@ -37202,7 +39426,7 @@ } }, "404": { - "description": "run or session not found", + "description": "session not found", "content": { "application/json": { "schema": { @@ -37212,7 +39436,7 @@ } }, "422": { - "description": "unprocessable entity (e.g. invalid UUID)", + "description": "unprocessable entity (e.g. invalid project UUID)", "content": { "application/json": { "schema": { @@ -37255,33 +39479,30 @@ "x-public": true } }, - "/v2/runs/{run_id}/share": { + "/api/v2/traces/query": { "post": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Creates or returns a share token for a run. Child runs share their trace root.", + "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": "Share a run", + "summary": "Query traces", "parameters": [ { - "description": "Run UUID", - "name": "run_id", - "in": "path", - "required": true, + "description": "application/json (required for JSON body)", + "name": "Content-Type", + "in": "header", "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -37291,13 +39512,13 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/share.CreateShareTokenResponseBody" + "$ref": "#/components/schemas/query.QueryTracesResponseBody" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { "application/json": { "schema": { @@ -37307,7 +39528,7 @@ } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { @@ -37317,7 +39538,7 @@ } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { @@ -37327,7 +39548,7 @@ } }, "404": { - "description": "Not Found", + "description": "session not found", "content": { "application/json": { "schema": { @@ -37336,8 +39557,8 @@ } } }, - "413": { - "description": "Request Entity Too Large", + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", "content": { "application/json": { "schema": { @@ -37347,7 +39568,27 @@ } }, "500": { - "description": "Internal Server Error", + "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": { @@ -37363,100 +39604,148 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/share.CreateShareTokenRequestBody" + "$ref": "#/components/schemas/query.QueryTracesRequestBody" } } } } } }, - "/v2/sandboxes/boxes": { + "/api/v2/traces/{trace_id}/runs": { "get": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] - }, - { - "X-Service-Key": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "List sandboxes for the authenticated tenant, with optional filtering, sorting, and pagination.", + "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": [ - "sandboxes" + "runs" ], - "summary": "List sandboxes", + "summary": "List runs in a trace", "parameters": [ { - "description": "Maximum number of results", - "name": "limit", - "in": "query", + "description": "application/json", + "name": "Accept", + "in": "header", "schema": { - "type": "integer", - "default": 50, - "title": "Limit" + "type": "string" } }, { - "description": "Pagination offset", - "name": "offset", - "in": "query", + "description": "Trace UUID", + "name": "trace_id", + "in": "path", + "required": true, "schema": { - "type": "integer", - "default": 0, - "title": "Offset" + "type": "string", + "format": "uuid" } }, { - "description": "Filter by name substring", - "name": "name_contains", + "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": "Name Contains" + "title": "Filter" } }, { - "description": "Filter by status (provisioning, ready, failed, stopped, deleting)", - "name": "status", + "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", - "title": "Status" + "format": "date-time", + "title": "Max Start Time" } }, { - "description": "Filter by creator identity. Only 'me' is supported.", - "name": "created_by", + "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", - "title": "Created By" + "format": "date-time", + "title": "Min Start Time" } }, { - "description": "Sort column (name, status, created_at)", - "name": "sort_by", + "description": "`project_id` is the UUID of the tracing project that owns the trace.", + "name": "project_id", "in": "query", + "required": true, "schema": { "type": "string", - "default": "created_at", - "title": "Sort By" + "format": "uuid", + "title": "Project Id" } }, { - "description": "Sort direction (asc, desc)", - "name": "sort_direction", + "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": "string", - "default": "desc", - "title": "Sort Direction" + "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" } } ], @@ -37466,349 +39755,97 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxListResponse" - } - } - } - }, - "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" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - } - }, - "x-public": true - }, - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "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.", - "tags": [ - "sandboxes" - ], - "summary": "Create a sandbox", - "parameters": [], - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/query.QueryTraceResponseBody" } } } }, "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", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "429": { - "description": "Quota exceeded", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "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", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.CreateSandboxPayload" - } - } - } - } - } - }, - "/v2/sandboxes/boxes/batch-delete": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Delete multiple sandboxes by name or UUID in a single request.", - "tags": [ - "sandboxes" - ], - "summary": "Batch delete sandboxes", - "parameters": [], - "responses": { - "200": { - "description": "OK", + "description": "bad request (missing or invalid query parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.BatchDeleteResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "x-public": true, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.BatchDeleteRequest" - } - } - } - } - } - }, - "/v2/sandboxes/boxes/{name}": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] }, - { - "X-Service-Key": [] - } - ], - "description": "Retrieve a sandbox by name. Stale provisioning sandboxes are auto-failed.", - "tags": [ - "sandboxes" - ], - "summary": "Get a sandbox", - "parameters": [ - { - "description": "Sandbox display name", - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "internal server error", "content": { "application/json": { - "schema": { - "$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" + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } } - } - ], - "responses": { - "204": { - "description": "No content" }, - "404": { - "description": "Not Found", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "504": { + "description": "gateway timeout or deadline exceeded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, "x-public": true - }, - "patch": { + } + }, + "/auth/public": { + "get": { "security": [ { "API Key": [] @@ -37818,64 +39855,47 @@ }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Update a sandbox's display name. The name must be unique within the tenant.", + "description": "Returns public authentication information for the current workspace-level session.", "tags": [ - "sandboxes" - ], - "summary": "Update a sandbox", - "parameters": [ - { - "description": "Current sandbox display name", - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "auth" ], + "summary": "Get public auth info", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" - } - } - } - }, - "404": { - "description": "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" + "$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" }, - "422": { - "description": "Validation error", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "string" } } } @@ -37885,7 +39905,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "string" } } } @@ -37895,17 +39915,26 @@ "requestBody": { "required": true, "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/sandboxes.UpdateSandboxPayload" + "type": "object", + "properties": { + "x-amzn-marketplace-token": { + "type": "string", + "description": "Registration token from AWS Marketplace" + } + }, + "required": [ + "x-amzn-marketplace-token" + ] } } } } } }, - "/v2/sandboxes/boxes/{name}/service-url": { - "post": { + "/datasets/{dataset_id}/experiment-view-overrides": { + "get": { "security": [ { "API Key": [] @@ -37917,98 +39946,93 @@ "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": "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": [ - "sandboxes" + "experiment-view-overrides" ], - "summary": "Generate a service access token", + "summary": "Get experiment view override configurations for a dataset", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "200": { - "description": "OK", + "description": "Successfully retrieved experiment view override configurations", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ServiceURLResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + } } } } }, "400": { - "description": "Bad Request", + "description": "Invalid dataset ID format\" example({\"error\":\"invalid dataset ID format\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Dataset not found or not accessible\" example({\"error\":\"dataset not found or not accessible\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "501": { - "description": "Not Implemented", + "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, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ServiceURLPayload" - } - } - } - } - } - }, - "/v2/sandboxes/boxes/{name}/snapshot": { + "x-public": true + }, "post": { "security": [ { @@ -38021,79 +40045,109 @@ "Bearer Auth": [] } ], - "description": "Create a snapshot by capturing the current state of a sandbox or promoting an existing checkpoint.", + "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": [ - "sandboxes" + "experiment-view-overrides" ], - "summary": "Capture a snapshot from a sandbox", + "summary": "Create new experiment view override configuration for a dataset", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "201": { - "description": "Created", + "description": "Successfully created experiment view override", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid request data\" example({\"error\":\"column_overrides field is required\"})", "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": "Dataset not found\" example({\"error\":\"dataset not found or not accessible\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "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": "Unprocessable Entity", + "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": { - "$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" + } } } } @@ -38105,15 +40159,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.CaptureSnapshotPayload" + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePostRequest" } } } } } }, - "/v2/sandboxes/boxes/{name}/start": { - "post": { + "/datasets/{dataset_id}/experiment-view-overrides/{id}": { + "get": { "security": [ { "API Key": [] @@ -38125,79 +40179,102 @@ "Bearer Auth": [] } ], - "description": "Start a stopped or failed sandbox. This endpoint is not idempotent.", + "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": [ - "sandboxes" + "experiment-view-overrides" ], - "summary": "Start a sandbox", + "summary": "Get experiment view override configuration by specific ID", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", "in": "path", "required": true, "schema": { - "type": "string" + "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": { - "202": { - "description": "Accepted", + "200": { + "description": "Successfully retrieved experiment view override configuration", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$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/boxes/{name}/status": { - "get": { + }, + "delete": { "security": [ { "API Key": [] @@ -38207,141 +40284,97 @@ }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Retrieve the lightweight status of a sandbox for polling.", + "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": "Get sandbox status", + "summary": "Delete experiment view override configuration", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", "in": "path", "required": true, "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxStatusResponse" - } - } - } - }, - "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" - } - } + "type": "string", + "format": "uuid" } - } - }, - "x-public": true - } - }, - "/v2/sandboxes/boxes/{name}/stop": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] }, { - "Bearer Auth": [] - } - ], - "description": "Stop a ready sandbox. This endpoint is not idempotent; the filesystem is preserved for later restart.", - "tags": [ - "sandboxes" - ], - "summary": "Stop a sandbox", - "parameters": [ - { - "description": "Sandbox display name", - "name": "name", + "example": "\"123e4567-e89b-12d3-a456-426614174000\"", + "description": "Experiment view override ID", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { "204": { - "description": "Sandbox stopped" + "description": "Successfully deleted experiment view override (no content returned)" }, "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": { + }, + "patch": { "security": [ { "API Key": [] @@ -38353,149 +40386,107 @@ "Bearer Auth": [] } ], - "description": "List sandbox registries 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": "List registries", + "summary": "Update existing 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", - "schema": { - "type": "integer", - "title": "Offset" - } - }, - { - "description": "Filter to registries whose name contains this substring", - "name": "name_contains", - "in": "query", + "example": "\"550e8400-e29b-41d4-a716-446655440000\"", + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Name Contains" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.RegistryListResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } + "format": "uuid" } }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } + { + "example": "\"123e4567-e89b-12d3-a456-426614174000\"", + "description": "Experiment view override ID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } - }, - "500": { - "description": "Internal Server Error", + } + ], + "responses": { + "200": { + "description": "Successfully updated experiment view override", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" } } } - } - }, - "x-public": true - }, - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] }, - { - "Bearer Auth": [] - } - ], - "description": "Create a sandbox registry for pulling private images.", - "tags": [ - "sandboxes" - ], - "summary": "Create a registry", - "parameters": [], - "responses": { - "201": { - "description": "Created", + "400": { + "description": "Invalid request data\" example({\"error\":\"invalid experiment view override ID format\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.RegistryResponse" + "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" + } } } } }, - "409": { - "description": "Conflict", + "422": { + "description": "Validation error\" example({\"error\":\"'precision' must be between 1 and 6 for column at index 0\"})", "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" + } } } } @@ -38507,14 +40498,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 +40518,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 +40540,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 +40570,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "string" } } } } }, "x-public": true - }, - "delete": { + } + }, + "/oauth/authorize": { + "get": { "security": [ { "API Key": [] @@ -38599,60 +40592,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 +40689,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 +40714,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 +40744,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -38746,99 +40754,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": { + "/oauth/client/{clientID}": { "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "List sandbox snapshots for the authenticated tenant, with optional filtering, sorting, and pagination.", + "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": [ - "sandboxes" + "oauth" ], - "summary": "List snapshots", + "summary": "Get public OAuth2 client metadata", "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" - } - }, - { - "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 +40824,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotListResponse" + "$ref": "#/components/schemas/oauth.ClientPublicMetadata" } } } @@ -38858,34 +40834,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 +40866,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 +40891,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,81 +40921,69 @@ "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": [] }, { "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Get a sandbox snapshot by ID.", - "tags": [ - "sandboxes" - ], - "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.SnapshotResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", + }, + { + "Bearer Auth": [] + } + ], + "description": "Issues a device code and user code for the device authorization flow per RFC 8628.", + "tags": [ + "oauth" + ], + "summary": "Request OAuth2 device authorization", + "parameters": [], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.DeviceCodeResponse" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -39034,15 +40993,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 +41034,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 +41076,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 +41106,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 +41186,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 +41410,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 +41447,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/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "403": { - "description": "Forbidden", + "description": "BYOC not enabled or insufficient permissions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "Not Found", + "description": "Data plane not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "409": { + "description": "Data plane is not active", + "content": { + "application/json": { + "schema": { + "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 +41536,7 @@ "x-public": true } }, - "/v2/sandboxes/{sandbox_id}/tunnel": { + "/repos/{owner}/{repo}/tags/{tag_name}/history": { "get": { "security": [ { @@ -39436,15 +41549,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,64 +41565,130 @@ } }, { - "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": { + "default": 50, + "type": "integer", + "maximum": 100, + "minimum": 1, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "schema": { + "default": 0, + "type": "integer", + "minimum": 0, + "title": "Offset" } } ], "responses": { - "101": { - "description": "WebSocket upgrade" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tag_transitions.TagTransitionHistoryResponse" + } + } + } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.ErrorResponse" + } + } + } + } + }, + "x-public": true + } + }, + "/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" } } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, - "x-public": true + "x-public": true, + "parameters": [] } }, - "/v2/sandboxes/{sandbox_id}/upload": { - "post": { + "/v1/agent-builder/integrations": { + "get": { "security": [ { "API Key": [] @@ -39521,39 +41700,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 +41721,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39573,7 +41734,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39583,7 +41747,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -39593,140 +41760,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 +41847,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": [] + }, + { + "Bearer Auth": [] } ], - "description": "**Alpha:** The request and response contract may change;\nRetrieve all traces belonging to a specific thread within a project.", + "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": [ - "threads" + "fleet secrets" ], - "summary": "Query Thread Traces", + "summary": "List workspace secret names", "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.", + "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)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/shared.ProblemDetails" - } - } - } + { + "Tenant ID": [] }, - "500": { - "description": "internal server error", + { + "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" } } } }, - "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 + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/secrets.bulkUpsertItem" + } + } + } + } + }, + "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 +42373,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": { @@ -42794,6 +44793,7 @@ "delete_tracer_sessions", "delete_runs", "share_run", + "unshare_run", "create_dataset", "create_csv_dataset", "create_experiment_via_upload", @@ -42882,6 +44882,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 +44920,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 +44948,7 @@ "update_sandbox_registry", "delete_sandbox_registry", "create_data_plane", + "delete_data_plane", "create_annotation_queue", "populate_annotation_queue", "delete_annotation_queue", @@ -42954,6 +44960,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 +45093,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 +45124,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 +45322,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 +47155,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 +48431,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 +48518,66 @@ ], "title": "CustomChartCreatePreview" }, + "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 +48783,8 @@ "completion_tokens", "total_cost", "prompt_cost", - "completion_cost" + "completion_cost", + "feedback_score" ], "title": "CustomChartMetricField" }, @@ -46797,6 +48848,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -46811,6 +48865,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -46841,6 +48898,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -46855,6 +48915,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -46961,7 +49024,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 +49084,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -47070,6 +49154,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -47156,6 +49243,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -47214,6 +49313,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -47300,6 +49402,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -47358,6 +49472,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -47485,6 +49602,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -47543,6 +49672,9 @@ { "$ref": "#/components/schemas/CustomChartMetricCount" }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, { "$ref": "#/components/schemas/CustomChartMetricScalar" }, @@ -47622,6 +49754,136 @@ ], "title": "CustomChartSeriesUpdate" }, + "CustomChartSeriesV2Equivalent-Input": { + "properties": { + "metric_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-Input" + }, + { + "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." + }, + "CustomChartSeriesV2Equivalent-Output": { + "properties": { + "metric_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$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" + } + }, + "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 +49892,8 @@ "table", "kpi", "top-k", - "pie" + "pie", + "text" ], "title": "CustomChartType", "description": "Enum for custom chart types." @@ -47764,6 +50027,20 @@ "default": { "__missing__": "__missing__" } + }, + "markdown": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/Missing" + } + ], + "title": "Markdown", + "default": { + "__missing__": "__missing__" + } } }, "type": "object", @@ -48010,7 +50287,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 +50324,16 @@ } ], "title": "Sub Sections" + }, + "layout": { + "anyOf": [ + { + "$ref": "#/components/schemas/DashboardLayout-Output" + }, + { + "type": "null" + } + ] } }, "type": "object", @@ -48253,6 +50559,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 +50611,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": "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": "CustomerInfo", - "description": "Customer info." + "title": "CustomTextBlockResponse" }, "CustomerVisiblePlanInfo": { "properties": { @@ -48338,6 +50783,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": [ @@ -50927,7 +53514,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 +53541,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", @@ -53548,7 +56147,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 +56501,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": { @@ -54796,6 +57333,117 @@ "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", + "title": "Prompt Cost" + }, + "completion_cost": { + "type": "string", + "title": "Completion Cost" + }, + "prompt_cost_details": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Prompt Cost Details" + }, + "completion_cost_details": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "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": { @@ -54947,8 +57595,7 @@ "OCSFApi": { "properties": { "operation": { - "$ref": "#/components/schemas/AuditLogOperation", - "x-extensible-enum": true + "$ref": "#/components/schemas/AuditLogOperation" } }, "type": "object", @@ -56138,6 +58785,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 +59046,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 +59091,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", @@ -57460,6 +60145,7 @@ "no_plan", "developer", "developer_01_2026", + "developer_07_2026", "plus", "plus_01_2026", "plus_07_2026", @@ -57467,9 +60153,11 @@ "developer_legacy", "plus_legacy", "free", + "free_07_2026", "enterprise_legacy", "startup", "startup_v0", + "startup_07_2026", "partner", "premier" ], @@ -58608,7 +61296,7 @@ "extend_trace_retention": { "type": "boolean", "title": "Extend Trace Retention", - "default": true + "default": false } }, "type": "object", @@ -61080,6 +63768,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", @@ -62935,6 +65635,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 +66138,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 +66292,17 @@ ], "title": "Evaluator Id" }, + "evaluator_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Evaluator Name" + }, "alignment_annotation_queue_id": { "anyOf": [ { @@ -63758,6 +66479,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 +66792,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", @@ -66506,6 +69243,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 +69795,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 +69814,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", @@ -67825,7 +70860,16 @@ "title": "Index" }, "chart_type": { - "$ref": "#/components/schemas/CustomChartType" + "type": "string", + "enum": [ + "line", + "bar", + "table", + "kpi", + "top-k", + "pie" + ], + "title": "Chart Type" }, "series": { "items": { @@ -69568,6 +72612,10 @@ "evaluator_count": { "type": "integer", "title": "Evaluator Count" + }, + "custom_app_count": { + "type": "integer", + "title": "Custom App Count" } }, "type": "object", @@ -69579,7 +72627,8 @@ "annotation_queue_count", "deployment_count", "dashboards_count", - "evaluator_count" + "evaluator_count", + "custom_app_count" ], "title": "TenantStats", "description": "Stats for a tenant." @@ -71957,6 +75006,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 +75048,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 +75365,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 +75377,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 +75405,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" @@ -72115,6 +75437,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 +75453,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 +75509,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 +75528,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" @@ -72802,6 +76136,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 +76164,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 +76420,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 +76442,9 @@ } } }, + "errutil.UserError": { + "type": "object" + }, "evaluators.BulkDeleteEvaluatorFailedItem": { "type": "object", "properties": { @@ -73159,6 +76531,10 @@ "commit_hash_or_tag": { "type": "string" }, + "playground_settings_id": { + "description": "Model Configuration ID", + "type": "string" + }, "prompt_repo_handle": { "type": "string" }, @@ -73197,6 +76573,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 +76848,10 @@ "num_few_shot_examples": { "type": "integer" }, + "playground_settings_id": { + "description": "Model Configuration ID", + "type": "string" + }, "prompt_repo_handle": { "type": "string" }, @@ -73768,6 +77152,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 +77178,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 +77198,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 +77398,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 +77549,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 +77878,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 +78018,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 +78080,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 +78246,9 @@ "expires_in": { "type": "integer" }, + "id_token": { + "type": "string" + }, "refresh_token": { "type": "string" }, @@ -74586,6 +78260,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 +78617,8 @@ "COMPLETION_COST_DETAILS", "PRICE_MODEL_ID", "TAGS", - "THREAD_EVALUATION_TIME" + "THREAD_EVALUATION_TIME", + "FEEDBACK_STATS" ] }, "example": [ @@ -75403,6 +79139,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 +79347,7 @@ "ATTACHMENTS", "THREAD_EVALUATION_TIME", "IS_IN_DATASET", + "LAST_QUEUED_AT", "SHARE_URL", "FEEDBACK_STATS" ], @@ -75651,6 +79394,7 @@ "RunSelectAttachments", "RunSelectThreadEvaluationTime", "RunSelectIsInDataset", + "RunSelectLastQueuedAt", "RunSelectShareURL", "RunSelectFeedbackStats" ] @@ -75689,6 +79433,14 @@ "RunTypeParser" ] }, + "query.RunURLResponse": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + }, "query.Trace": { "type": "object", "properties": { @@ -75833,6 +79585,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 +79669,20 @@ } } }, + "sandboxapi.GrepMatch": { + "type": "object", + "properties": { + "line": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "text": { + "type": "string" + } + } + }, "sandboxapi.MountCacheSpec": { "type": "object", "properties": { @@ -75902,12 +79701,14 @@ "enum": [ "s3", "gcs", - "git" + "git", + "contexthub" ], "x-enum-varnames": [ "MountKindS3", "MountKindGCS", - "MountKindGit" + "MountKindGit", + "MountKindContextHub" ] }, "sandboxapi.MountSpec": { @@ -75921,6 +79722,9 @@ "cache": { "$ref": "#/components/schemas/sandboxapi.MountCacheSpec" }, + "contexthub": { + "$ref": "#/components/schemas/sandboxapi.ContextHubMountSpec" + }, "gcs": { "$ref": "#/components/schemas/sandboxapi.GCSMountSpec" }, @@ -75944,7 +79748,8 @@ "enum": [ "s3", "gcs", - "git" + "git", + "contexthub" ], "allOf": [ { @@ -75957,7 +79762,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 +79776,9 @@ }, { "$ref": "#/components/schemas/sandboxapi.GitRepoMountSpec" + }, + { + "$ref": "#/components/schemas/sandboxapi.ContextHubRepoMountSpec" } ] }, @@ -76109,6 +79918,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,6 +79976,14 @@ "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": { "type": "integer" }, @@ -76168,6 +79993,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 +80035,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 +80111,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 +80244,12 @@ "HeaderTypeWorkspaceSecret" ] }, + "sandboxes.Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "sandboxes.ProxyAWSConfig": { "type": "object", "required": [ @@ -76389,6 +80352,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 +80547,9 @@ "idle_ttl_seconds": { "type": "integer" }, + "labels": { + "$ref": "#/components/schemas/sandboxes.Labels" + }, "mem_bytes": { "type": "integer" }, @@ -76586,6 +80559,9 @@ "name": { "type": "string" }, + "preserve_memory_on_stop": { + "type": "boolean" + }, "proxy_config": { "$ref": "#/components/schemas/sandboxes.ProxyConfig" }, @@ -76692,6 +80668,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" @@ -76992,6 +80971,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 +81252,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 +81481,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 +81496,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 +81516,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 +81569,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 +81591,9 @@ "FIRST_TOKEN_TIME", "INPUTS_PREVIEW", "OUTPUTS_PREVIEW", + "INPUTS", + "OUTPUTS", + "ERROR", "PROMPT_COST", "COMPLETION_COST", "TOTAL_COST", @@ -77611,6 +81617,9 @@ "ThreadTraceSelectFirstTokenTime", "ThreadTraceSelectInputsPreview", "ThreadTraceSelectOutputsPreview", + "ThreadTraceSelectInputs", + "ThreadTraceSelectOutputs", + "ThreadTraceSelectError", "ThreadTraceSelectPromptCost", "ThreadTraceSelectCompletionCost", "ThreadTraceSelectTotalCost", @@ -77874,6 +81883,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 +81910,9 @@ }, "updated_at": { "type": "string" + }, + "watching_since": { + "type": "string" } } }, @@ -77966,11 +81982,15 @@ "type": "string", "enum": [ "open", + "fixing", + "watching", "completed", "ignored" ], "x-enum-varnames": [ "StatusOpen", + "StatusFixing", + "StatusWatching", "StatusCompleted", "StatusIgnored" ] @@ -78039,6 +82059,9 @@ "cron_schedule": { "type": "string" }, + "engine_version": { + "type": "string" + }, "github_base_branch": { "type": "string" }, @@ -78189,6 +82212,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 +82377,11 @@ "required": [ "git" ] + }, + { + "required": [ + "contexthub" + ] } ] } @@ -78398,6 +82433,11 @@ "required": [ "git" ] + }, + { + "required": [ + "contexthub" + ] } ] } @@ -78446,6 +82486,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" + ] } ] }