diff --git a/src/langsmith/langsmith-platform-openapi.json b/src/langsmith/langsmith-platform-openapi.json index 1629573955..36539c6a74 100644 --- a/src/langsmith/langsmith-platform-openapi.json +++ b/src/langsmith/langsmith-platform-openapi.json @@ -6,28 +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" - } - } - } - } - } - } - }, "/api/v1/info/health": { "get": { "tags": [ @@ -47,51 +25,8 @@ } } } - } - } - }, - "/api/v1/metrics/queue/{queue_name}": { - "get": { - "tags": [ - "metrics" - ], - "summary": "Get Queue Metrics", - "description": "Return cached SAQ queue counts for the requested queue.", - "operationId": "get_queue_metrics_api_v1_metrics_queue__queue_name__get", - "parameters": [ - { - "name": "queue_name", - "in": "path", - "required": true, - "schema": { - "type": "string", - "title": "Queue Name" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueueInfoResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } }, - "x-hidden": true + "x-public": true } }, "/api/v1/sessions/{session_id}/dashboard": { @@ -172,7 +107,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}": { @@ -181,7 +117,7 @@ "tracer-sessions" ], "summary": "Read Tracer Session", - "description": "Get a specific session.", + "description": "Get a specific project.", "operationId": "read_tracer_session_api_v1_sessions__session_id__get", "security": [ { @@ -270,14 +206,15 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ "tracer-sessions" ], "summary": "Update Tracer Session", - "description": "Update a session.", + "description": "Update a project.", "operationId": "update_tracer_session_api_v1_sessions__session_id__patch", "security": [ { @@ -333,14 +270,15 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ "tracer-sessions" ], "summary": "Delete Tracer Session", - "description": "Delete a specific session.", + "description": "Delete a specific project.\n\nReturns 202 when deletion is accepted. Cleanup runs asynchronously.\nLocation identifies the affected project, not a cleanup-status endpoint.\nFor a caller with read access, GET at that URL returns 200 with the project\nwhile it is still available, or 404 after the project is removed. A 404 does\nnot confirm that background trace cleanup has finished. Polling for cleanup\ncompletion is not supported.", "operationId": "delete_tracer_session_api_v1_sessions__session_id__delete", "security": [ { @@ -366,11 +304,14 @@ } ], "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} + "202": { + "description": "Deletion accepted; background cleanup may still be running.", + "headers": { + "Location": { + "description": "The affected project URL, not a cleanup-status endpoint.", + "schema": { + "type": "string" + } } } }, @@ -384,7 +325,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions": { @@ -393,7 +335,7 @@ "tracer-sessions" ], "summary": "Read Tracer Sessions", - "description": "Get all sessions.", + "description": "List all projects.", "operationId": "read_tracer_sessions_api_v1_sessions_get", "security": [ { @@ -761,14 +703,15 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ "tracer-sessions" ], "summary": "Create Tracer Session", - "description": "Create a new session.", + "description": "Create a new project.", "operationId": "create_tracer_session_api_v1_sessions_post", "security": [ { @@ -824,14 +767,15 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ "tracer-sessions" ], "summary": "Delete Tracer Sessions", - "description": "Delete sessions.", + "description": "Delete projects.", "operationId": "delete_tracer_sessions_api_v1_sessions_delete", "security": [ { @@ -878,7 +822,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/metadata": { @@ -990,7 +935,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/views": { @@ -1065,7 +1011,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -1128,7 +1075,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/views/{view_id}": { @@ -1193,7 +1141,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -1266,7 +1215,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -1327,7 +1277,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/views/{view_id}/rename": { @@ -1402,7 +1353,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/insights": { @@ -1411,7 +1363,7 @@ "tracer-sessions" ], "summary": "[Beta] Get Insights Jobs", - "description": "Get all clusters for a session.", + "description": "List Insights jobs for a project.", "operationId": "_Beta__Get_Insights_Jobs_api_v1_sessions__session_id__insights_get", "security": [ { @@ -1513,14 +1465,15 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ "tracer-sessions" ], "summary": "[Beta] Create Insights Job", - "description": "Create an insights job.", + "description": "Create an Insights job for a project.", "operationId": "_Beta__Create_Insights_Job_api_v1_sessions__session_id__insights_post", "security": [ { @@ -1576,7 +1529,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/insights/configs": { @@ -1585,7 +1539,7 @@ "tracer-sessions" ], "summary": "[Beta] Get Insights Job Configs", - "description": "Get all insights job configs for a session.", + "description": "List Insights job configurations for a project.", "operationId": "_Beta__Get_Insights_Job_Configs_api_v1_sessions__session_id__insights_configs_get", "security": [ { @@ -1641,14 +1595,15 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ "tracer-sessions" ], "summary": "[Beta] Create Insights Job Config", - "description": "Save an insights job config.", + "description": "Create an Insights job configuration for a project.", "operationId": "_Beta__Create_Insights_Job_Config_api_v1_sessions__session_id__insights_configs_post", "security": [ { @@ -1704,7 +1659,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/insights/configs/generate": { @@ -1713,7 +1669,7 @@ "tracer-sessions" ], "summary": "[Beta] Auto-Generate Insights Job Config", - "description": "Auto-generate an insights job config.", + "description": "Generate an Insights job configuration for a project.", "operationId": "_Beta__Auto_Generate_Insights_Job_Config_api_v1_sessions__session_id__insights_configs_generate_post", "security": [ { @@ -1769,7 +1725,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/insights/configs/{config_id}": { @@ -1778,7 +1735,7 @@ "tracer-sessions" ], "summary": "[Beta] Update Insights Job Config", - "description": "Update an insights job config.", + "description": "Update an Insights job configuration for a project.", "operationId": "_Beta__Update_Insights_Job_Config_api_v1_sessions__session_id__insights_configs__config_id__patch", "security": [ { @@ -1844,14 +1801,15 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ "tracer-sessions" ], "summary": "[Beta] Delete Insights Job Config", - "description": "Delete an insights job config.", + "description": "Delete an Insights job configuration for a project.", "operationId": "_Beta__Delete_Insights_Job_Config_api_v1_sessions__session_id__insights_configs__config_id__delete", "security": [ { @@ -1907,7 +1865,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/insights/{job_id}": { @@ -1916,7 +1875,7 @@ "tracer-sessions" ], "summary": "[Beta] Get Insights Job", - "description": "Get a specific cluster job for a session.", + "description": "Get an Insights job for a project.", "operationId": "_Beta__Get_Insights_Job_api_v1_sessions__session_id__insights__job_id__get", "security": [ { @@ -1972,14 +1931,15 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ "tracer-sessions" ], "summary": "[Beta] Update Insights Job", - "description": "Update a session cluster job.", + "description": "Update an Insights job for a project.", "operationId": "_Beta__Update_Insights_Job_api_v1_sessions__session_id__insights__job_id__patch", "security": [ { @@ -2045,14 +2005,15 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ "tracer-sessions" ], "summary": "[Beta] Delete Insights Job", - "description": "Delete a session cluster job.", + "description": "Delete an Insights job for a project.", "operationId": "_Beta__Delete_Insights_Job_api_v1_sessions__session_id__insights__job_id__delete", "security": [ { @@ -2108,7 +2069,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/insights/{job_id}/clusters/{cluster_id}": { @@ -2117,7 +2079,7 @@ "tracer-sessions" ], "summary": "[Beta] Get Run Cluster From Insights Job", - "description": "Get a specific cluster for a session.", + "description": "Get a cluster from the report produced by an Insights job.", "operationId": "_Beta__Get_Run_Cluster_from_Insights_Job_api_v1_sessions__session_id__insights__job_id__clusters__cluster_id__get", "security": [ { @@ -2183,7 +2145,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sessions/{session_id}/insights/{job_id}/runs": { @@ -2192,7 +2155,7 @@ "tracer-sessions" ], "summary": "[Beta] Get Runs From Insights Job", - "description": "Get all runs for a cluster job, optionally filtered by cluster.", + "description": "List runs analyzed by an Insights job, optionally filtered by report cluster.", "operationId": "_Beta__Get_Runs_from_Insights_Job_api_v1_sessions__session_id__insights__job_id__runs_get", "security": [ { @@ -2324,7 +2287,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces": { @@ -2377,7 +2341,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -2451,7 +2416,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/{workspace_id}": { @@ -2516,7 +2482,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -2566,7 +2533,89 @@ } } } - } + }, + "x-public": true + }, + "get": { + "tags": [ + "workspaces" + ], + "summary": "Get Workspace", + "description": "Get a single workspace by ID, scoped to the current org and identity.", + "operationId": "get_workspace_api_v1_workspaces__workspace_id__get", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "workspace_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Workspace Id" + } + }, + { + "name": "include_deleted", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Deleted" + } + }, + { + "name": "data_plane_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Data Plane Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TenantForUser" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true } }, "/api/v1/workspaces/current/stats": { @@ -2630,7 +2679,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/usage_limits": { @@ -2662,7 +2712,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/workspaces/current/shared": { @@ -2730,7 +2781,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -2779,7 +2831,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/secrets": { @@ -2789,22 +2842,65 @@ ], "summary": "List Current Workspace Secrets", "operationId": "list_current_workspace_secrets_api_v1_workspaces_current_secrets_get", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "include_configs", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "If true, include the hosts each secret may be sent to.", + "default": false, + "title": "Include Configs" + }, + "description": "If true, include the hosts each secret may be sent to." + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { + "type": "array", "items": { - "$ref": "#/components/schemas/SecretKey" + "$ref": "#/components/schemas/WorkspaceSecret" }, - "type": "array", "title": "Response List Current Workspace Secrets Api V1 Workspaces Current Secrets Get" } } } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } }, + "x-public": true + }, + "post": { + "tags": [ + "workspaces" + ], + "summary": "Upsert Current Workspace Secrets", + "operationId": "upsert_current_workspace_secrets_api_v1_workspaces_current_secrets_post", "security": [ { "API Key": [] @@ -2815,27 +2911,20 @@ { "Bearer Auth": [] } - ] - }, - "post": { - "tags": [ - "workspaces" ], - "summary": "Upsert Current Workspace Secrets", - "operationId": "upsert_current_workspace_secrets_api_v1_workspaces_current_secrets_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { + "type": "array", "items": { "$ref": "#/components/schemas/SecretUpsert" }, - "type": "array", "title": "Secrets" } } - }, - "required": true + } }, "responses": { "200": { @@ -2857,6 +2946,17 @@ } } }, + "x-public": true + } + }, + "/api/v1/workspaces/current/secrets/{key}": { + "put": { + "tags": [ + "workspaces" + ], + "summary": "Put Current Workspace Secret", + "description": "Create or update a workspace secret and the hosts it may be sent to.\n\nOmit `value` to keep the current one; it is required to create a secret.\n`configs` replaces the secret's hosts; omitted or empty restores the\nbuilt-in defaults for known provider keys. The value is never returned.", + "operationId": "put_current_workspace_secret_api_v1_workspaces_current_secrets__key__put", "security": [ { "API Key": [] @@ -2867,7 +2967,125 @@ { "Bearer Auth": [] } - ] + ], + "parameters": [ + { + "name": "key", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Key" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceSecretUpsert" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceSecret" + } + } + } + }, + "201": { + "description": "Secret created.", + "headers": { + "Location": { + "description": "URL of the created secret.", + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceSecret" + } + } + } + }, + "400": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + }, + "description": "The value is missing for a new secret, or a host config is invalid." + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + }, + "delete": { + "tags": [ + "workspaces" + ], + "summary": "Delete Current Workspace Secret", + "description": "Delete a workspace secret and its allowed hosts. Missing keys succeed.", + "operationId": "delete_current_workspace_secret_api_v1_workspaces_current_secrets__key__delete", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "key", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Key" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true } }, "/api/v1/workspaces/current/secrets/encrypted": { @@ -2960,7 +3178,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/tag-keys": { @@ -2996,7 +3215,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -3046,7 +3266,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/workspaces/current/tag-keys/{tag_key_id}": { @@ -3110,7 +3331,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -3162,7 +3384,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -3212,7 +3435,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/tag-keys/{tag_key_id}/tag-values": { @@ -3276,7 +3500,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -3332,7 +3557,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/tag-keys/{tag_key_id}/tag-values/{tag_value_id}": { @@ -3396,7 +3622,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -3468,7 +3695,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -3528,7 +3756,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/taggings": { @@ -3580,7 +3809,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -3643,7 +3873,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/taggings/{tagging_id}": { @@ -3695,7 +3926,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/tags": { @@ -3705,33 +3937,62 @@ ], "summary": "List Tags", "operationId": "list_tags_api_v1_workspaces_current_tags_get", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "resource_type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/ResourceType" + }, + { + "type": "null" + } + ], + "title": "Resource Type" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { + "type": "array", "items": { "$ref": "#/components/schemas/TagKeyWithValues" }, - "type": "array", "title": "Response List Tags Api V1 Workspaces Current Tags Get" } } } - } - }, - "security": [ - { - "API Key": [] }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } - ] + }, + "x-public": true } }, "/api/v1/workspaces/current/tags/resource": { @@ -3797,7 +4058,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/tags/resources": { @@ -3863,7 +4125,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/audit-logs": { @@ -3981,6 +4244,71 @@ "title": "Operations" }, "description": "Filter by operation names. If omitted, all operations are returned." + }, + { + "name": "actor_ls_user_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "description": "Filter by human actor (ls_user_id).", + "title": "Actor Ls User Ids" + }, + "description": "Filter by human actor (ls_user_id)." + }, + { + "name": "actor_api_key_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + { + "type": "null" + } + ], + "description": "Filter by API key actor (api_key_id).", + "title": "Actor Api Key Ids" + }, + "description": "Filter by API key actor (api_key_id)." + }, + { + "name": "resource_ids", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" + } + ], + "description": "Filter by resource ID. Matches if any resource ID is present on the log.", + "title": "Resource Ids" + }, + "description": "Filter by resource ID. Matches if any resource ID is present on the log." } ], "responses": { @@ -4004,7 +4332,42 @@ } } } - } + }, + "x-public": true + } + }, + "/api/v1/audit-logs/operations": { + "get": { + "tags": [ + "audit-logs" + ], + "summary": "List Audit Log Operations", + "description": "List all possible audit log operation names, for populating filter UI.\n\nIndependent of any operations actually recorded so far for the organization.", + "operationId": "list_audit_log_operations_api_v1_audit_logs_operations_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListAuditLogOperationsResponse" + } + } + } + } + }, + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true } }, "/api/v1/ttl-settings": { @@ -4041,7 +4404,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "put": { "tags": [ @@ -4091,7 +4455,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/ttl-settings": { @@ -4128,7 +4493,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "put": { "tags": [ @@ -4178,27 +4544,8 @@ { "Bearer Auth": [] } - ] - } - }, - "/api/v1/ok": { - "get": { - "tags": [ - "health" ], - "summary": "Ok", - "operationId": "ok_api_v1_ok_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, - "x-hidden": true + "x-public": true } }, "/api/v1/examples/count": { @@ -4371,7 +4718,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/examples/{example_id}": { @@ -4463,7 +4811,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -4524,7 +4873,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -4575,7 +4925,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/examples": { @@ -4773,6 +5124,10 @@ "name", "dataset_id", "source_run_id", + "source_session_id", + "source_run_start_time", + "source_trace_id", + "source_thread_id", "metadata", "inputs", "outputs" @@ -4838,7 +5193,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -4906,6 +5262,42 @@ ], "title": "Source Run Id" }, + "source_session_id": { + "anyOf": [ + { + "format": "uuid", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Session Id" + }, + "source_run_start_time": { + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Run Start Time" + }, + "source_trace_id": { + "anyOf": [ + { + "format": "uuid", + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Trace Id" + }, "metadata": { "anyOf": [ { @@ -4992,7 +5384,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -5046,7 +5439,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/examples/bulk": { @@ -5092,6 +5486,42 @@ ], "title": "Source Run Id" }, + "source_session_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Session Id" + }, + "source_run_start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Source Run Start Time" + }, + "source_trace_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Trace Id" + }, "metadata": { "anyOf": [ { @@ -5216,7 +5646,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "patch": { "tags": [ @@ -5269,7 +5700,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/examples/upload/{dataset_id}": { @@ -5338,7 +5770,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/examples/validate": { @@ -5371,7 +5804,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/examples/validate/bulk": { @@ -5408,7 +5842,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/datasets": { @@ -5638,7 +6073,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -5689,7 +6125,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -5744,7 +6181,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/stream": { @@ -5949,7 +6387,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}": { @@ -6004,7 +6443,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -6055,7 +6495,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -6126,7 +6567,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/upload": { @@ -6179,7 +6621,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/datasets/upload-experiment": { @@ -6232,7 +6675,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/datasets/{dataset_id}/versions": { @@ -6347,7 +6791,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/versions/diff": { @@ -6436,7 +6881,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/version": { @@ -6524,7 +6970,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/tags": { @@ -6589,7 +7036,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/openai": { @@ -6661,7 +7109,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/openai_ft": { @@ -6733,7 +7182,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/csv": { @@ -6805,7 +7255,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/jsonl": { @@ -6877,7 +7328,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/runs": { @@ -6888,6 +7340,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": [] @@ -6973,17 +7426,18 @@ } } } - } + }, + "x-public": true } }, - "/api/v1/datasets/{dataset_id}/group/runs": { - "post": { + "/api/v1/datasets/{dataset_id}/share": { + "get": { "tags": [ "datasets" ], - "summary": "Read Examples With Runs Grouped", - "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_grouped_api_v1_datasets__dataset_id__group_runs_post", + "summary": "Read Dataset Share State", + "description": "Get the state of sharing a dataset", + "operationId": "read_dataset_share_state_api_v1_datasets__dataset_id__share_get", "security": [ { "API Key": [] @@ -7007,23 +7461,21 @@ } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryGroupedExamplesWithRuns" - } - } - } - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GroupedExamplesWithRunsResponse" + "anyOf": [ + { + "$ref": "#/components/schemas/DatasetShareSchema" + }, + { + "type": "null" + } + ], + "title": "Response Read Dataset Share State Api V1 Datasets Dataset Id Share Get" } } } @@ -7038,17 +7490,16 @@ } } } - } - } - }, - "/api/v1/datasets/{dataset_id}/runs/delta": { - "post": { + }, + "x-public": true + }, + "put": { "tags": [ "datasets" ], - "summary": "Read Delta", - "description": "Fetch the number of regressions/improvements for each example in a dataset, between sessions[0] and sessions[1].", - "operationId": "read_delta_api_v1_datasets__dataset_id__runs_delta_post", + "summary": "Share Dataset", + "description": "Share a dataset.", + "operationId": "share_dataset_api_v1_datasets__dataset_id__share_put", "security": [ { "API Key": [] @@ -7070,89 +7521,26 @@ "format": "uuid", "title": "Dataset Id" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryFeedbackDelta" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SessionFeedbackDelta" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/datasets/{dataset_id}/runs/delta/stream": { - "post": { - "tags": [ - "datasets" - ], - "summary": "Read Delta Stream", - "description": "Stream feedback deltas for multiple feedback keys.\n\nReturns results in chunks as they become available. Each chunk contains\nresults for one or more feedback keys. Errors for individual chunks are\nincluded in the response rather than failing the entire operation.\n\nResponse format (SSE):\n event: data\n data: {\"feedback_deltas\": {\"key1\": {session_id: {...}}, ...}, \"errors\": null}\n\n event: data\n data: {\"feedback_deltas\": {\"key2\": {...}}, \"errors\": null}\n\n event: end", - "operationId": "read_delta_stream_api_v1_datasets__dataset_id__runs_delta_stream_post", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] }, { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "dataset_id", - "in": "path", - "required": true, + "name": "share_projects", + "in": "query", + "required": false, "schema": { - "type": "string", - "format": "uuid", - "title": "Dataset Id" + "type": "boolean", + "default": false, + "title": "Share Projects" } } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryFeedbackDeltaBatch" - } - } - } - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/DatasetShareSchema" + } } } }, @@ -7166,204 +7554,16 @@ } } } - } - } - }, - "/api/v1/datasets/{dataset_id}/experiments/grouped": { - "post": { + }, + "x-public": true + }, + "delete": { "tags": [ "datasets" ], - "summary": "Read Grouped Experiments", - "description": "Stream grouped and aggregated experiments.", - "operationId": "read_grouped_experiments_api_v1_datasets__dataset_id__experiments_grouped_post", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "dataset_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Dataset Id" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupedExperimentsRequest" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/datasets/{dataset_id}/share": { - "get": { - "tags": [ - "datasets" - ], - "summary": "Read Dataset Share State", - "description": "Get the state of sharing a dataset", - "operationId": "read_dataset_share_state_api_v1_datasets__dataset_id__share_get", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "dataset_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Dataset Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "anyOf": [ - { - "$ref": "#/components/schemas/DatasetShareSchema" - }, - { - "type": "null" - } - ], - "title": "Response Read Dataset Share State Api V1 Datasets Dataset Id Share Get" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - }, - "put": { - "tags": [ - "datasets" - ], - "summary": "Share Dataset", - "description": "Share a dataset.", - "operationId": "share_dataset_api_v1_datasets__dataset_id__share_put", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "dataset_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Dataset Id" - } - }, - { - "name": "share_projects", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "default": false, - "title": "Share Projects" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DatasetShareSchema" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - }, - "delete": { - "tags": [ - "datasets" - ], - "summary": "Unshare Dataset", - "description": "Unshare a dataset.", - "operationId": "unshare_dataset_api_v1_datasets__dataset_id__share_delete", + "summary": "Unshare Dataset", + "description": "Unshare a dataset.", + "operationId": "unshare_dataset_api_v1_datasets__dataset_id__share_delete", "security": [ { "API Key": [] @@ -7406,160 +7606,8 @@ } } } - } - } - }, - "/api/v1/datasets/{dataset_id}/comparative": { - "get": { - "tags": [ - "datasets" - ], - "summary": "Read Comparative Experiments", - "description": "Get all comparative experiments for a given dataset.", - "operationId": "read_comparative_experiments_api_v1_datasets__dataset_id__comparative_get", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "dataset_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Dataset Id" - } - }, - { - "name": "name", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - } - }, - { - "name": "name_contains", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name Contains" - } - }, - { - "name": "id", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - { - "type": "null" - } - ], - "title": "Id" - } - }, - { - "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": "sort_by", - "in": "query", - "required": false, - "schema": { - "$ref": "#/components/schemas/SortByComparativeExperimentColumn", - "default": "created_at" - } - }, - { - "name": "sort_by_desc", - "in": "query", - "required": false, - "schema": { - "type": "boolean", - "default": true, - "title": "Sort By Desc" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ComparativeExperiment" - }, - "title": "Response Read Comparative Experiments Api V1 Datasets Dataset Id Comparative Get" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } + }, + "x-public": true } }, "/api/v1/datasets/comparative": { @@ -7612,7 +7660,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/datasets/comparative/{comparative_experiment_id}": { @@ -7665,7 +7714,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/clone": { @@ -7723,7 +7773,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/datasets/{dataset_id}/splits": { @@ -7801,7 +7852,8 @@ } } } - } + }, + "x-public": true }, "put": { "tags": [ @@ -7868,7 +7920,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/{dataset_id}/generate": { @@ -7931,7 +7984,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/datasets/studio_experiment": { @@ -7983,7 +8037,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/rules": { @@ -8169,7 +8224,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -8220,7 +8276,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/rules/validate": { @@ -8278,7 +8335,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/rules/{rule_id}": { @@ -8343,7 +8401,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -8394,7 +8453,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/threads/{thread_id}": { @@ -8496,7 +8556,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/rules/{rule_id}/logs": { @@ -8629,7 +8690,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/rules/{rule_id}/logs/v2": { @@ -8773,7 +8835,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/rules/{rule_id}/last_applied": { @@ -8838,7 +8901,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/rules/{rule_id}/trigger": { @@ -8877,9 +8941,7 @@ "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/RunRulesSchema" - } + "schema": {} } } }, @@ -8893,7 +8955,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/rules/trigger": { @@ -8944,7 +9007,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/{run_id}": { @@ -8955,6 +9019,7 @@ "summary": "Read Run", "description": "Get a specific run.", "operationId": "read_run_api_v1_runs__run_id__get", + "deprecated": true, "security": [ { "API Key": [] @@ -9063,57 +9128,135 @@ } } } - } + }, + "x-public": true }, "patch": { + "description": "Updates a run identified by its ID. The body should contain only the fields to be changed; unknown fields are ignored.", "tags": [ - "run" - ], - "summary": "Update Run", - "description": "Update a run.", - "operationId": "update_run_api_v1_runs__run_id__patch", - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } + "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" } } } } + }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.Run" + } + } + } } } }, @@ -9125,6 +9268,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": [] @@ -9177,7 +9321,8 @@ } } } - } + }, + "x-public": true }, "put": { "tags": [ @@ -9186,6 +9331,7 @@ "summary": "Share Run", "description": "Share a run.", "operationId": "share_run_api_v1_runs__run_id__share_put", + "deprecated": true, "security": [ { "API Key": [] @@ -9230,7 +9376,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -9239,6 +9386,7 @@ "summary": "Unshare Run", "description": "Unshare a run.", "operationId": "unshare_run_api_v1_runs__run_id__share_delete", + "deprecated": true, "security": [ { "API Key": [] @@ -9281,7 +9429,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/query/validate": { @@ -9323,7 +9472,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/query": { @@ -9365,6 +9515,7 @@ } } }, + "deprecated": true, "security": [ { "API Key": [] @@ -9375,7 +9526,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/generate-query": { @@ -9428,7 +9580,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/stats": { @@ -9492,23 +9645,91 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs": { "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 Run Proxy", - "description": "Create a new run.", - "operationId": "create_run_proxy_api_v1_runs_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" + } } } } @@ -9523,23 +9744,121 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/runs.Run" + } + } + } + } } }, "/api/v1/runs/batch": { "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 Batch Proxy", - "description": "Proxy POST /runs/batch to Go backend for tests.", - "operationId": "create_runs_batch_proxy_api_v1_runs_batch_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" + } + } + } + }, + "408": { + "description": "Request body was not fully received within the server time limit", + "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" + } } } } @@ -9554,23 +9873,133 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "patch": { + "type": "array", + "items": { + "$ref": "#/components/schemas/runs.Run" + } + }, + "post": { + "type": "array", + "items": { + "$ref": "#/components/schemas/runs.Run" + } + } + } + } + } + } + } } }, "/api/v1/runs/multipart": { "post": { + "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": [ - "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 (Multipart)", + "parameters": [], "responses": { "202": { - "description": "Successful Response", + "description": "Accepted", "content": { "application/json": { - "schema": {} + "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" + } + } + } + }, + "408": { + "description": "Request body was not fully received within the server time limit", + "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" + } } } } @@ -9585,7 +10014,50 @@ { "Bearer Auth": [] } - ] + ], + "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": { @@ -9654,7 +10126,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/runs/group/stats": { @@ -9707,7 +10180,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/delete/traces": { @@ -9758,7 +10232,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/delete": { @@ -9767,7 +10242,7 @@ "run" ], "summary": "Delete Runs", - "description": "Delete specific runs by trace IDs or metadata key-value pairs.", + "description": "DELETE with body payload — removes the runs identified by the request payload.\n\nDelete runs by trace ID, or every run in a time range.\n\nSupply `session_id` and `trace_ids` to delete a known list of traces, or\n`metadata` with `start_time` to delete matching traces from that time\nonward. Add `end_time` to bound the range; with both bounds set `metadata`\nis optional, and omitting it deletes every trace that started in the range.", "operationId": "delete_runs_api_v1_runs_delete_post", "requestBody": { "content": { @@ -9808,7 +10283,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/runs/experiments/{experiment_id}/evaluate": { @@ -9875,7 +10351,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/feedback/formulas": { @@ -9884,8 +10361,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": [] @@ -9928,15 +10406,17 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ "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": [] @@ -10029,7 +10509,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/feedback/formulas/{feedback_formula_id}": { @@ -10038,8 +10519,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": [] @@ -10084,15 +10566,17 @@ } } } - } + }, + "x-public": true }, "put": { "tags": [ "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": [] @@ -10147,15 +10631,17 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ "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": [] @@ -10198,7 +10684,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/feedback/{feedback_id}": { @@ -10269,7 +10756,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -10332,7 +10820,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -10383,7 +10872,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/feedback": { @@ -10617,6 +11107,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", @@ -10676,14 +11182,15 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ "feedback" ], "summary": "Create Feedback", - "description": "Create a new feedback.", + "description": "Create a new feedback.\n\n`session_id` identifies the tracing project the feedback belongs to. It is\nrequired unless the feedback is addressed by `address`, which names that\nproject through an Agent environment that already exists.", "operationId": "create_feedback_api_v1_feedback_post", "security": [ { @@ -10717,47 +11224,14 @@ } } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/feedback/eager": { - "post": { - "tags": [ - "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", - "operationId": "eagerly_create_feedback_api_v1_feedback_eager_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FeedbackCreateSchema" - } - } + "400": { + "description": "The address is invalid, or no Agent environment matches it. Feedback does not create one." }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FeedbackSchema" - } - } - } + "403": { + "description": "The feedback key is reserved, or Agent addressing is not enabled for this workspace." + }, + "409": { + "description": "The addressed Agent is archived, or its environment is bound to a tracing project that is not Agent-owned." }, "422": { "description": "Validation Error", @@ -10770,17 +11244,7 @@ } } }, - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ] + "x-public": true } }, "/api/v1/feedback/tokens": { @@ -10855,7 +11319,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -10912,7 +11377,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/feedback/tokens/{token}": { @@ -10956,6 +11422,16 @@ "title": "Score" } }, + { + "name": "extend_trace_retention", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Extend Trace Retention" + } + }, { "name": "value", "in": "query", @@ -11033,7 +11509,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -11083,7 +11560,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/run": { @@ -11137,7 +11615,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/run/{id}": { @@ -11148,6 +11627,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", @@ -11201,7 +11681,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/runs/query": { @@ -11212,6 +11693,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", @@ -11255,7 +11737,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/feedbacks": { @@ -11471,7 +11954,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/datasets": { @@ -11557,7 +12041,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/examples/count": { @@ -11674,7 +12159,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/examples": { @@ -11840,7 +12326,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/datasets/sessions": { @@ -11965,6 +12452,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", @@ -11998,6 +12501,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", @@ -12040,7 +12605,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/datasets/sessions-bulk": { @@ -12059,7 +12625,8 @@ "schema": { "type": "array", "items": { - "type": "string" + "type": "string", + "format": "uuid" }, "title": "Share Tokens" } @@ -12090,181 +12657,8 @@ } } } - } - } - }, - "/api/v1/public/{share_token}/examples/runs": { - "post": { - "tags": [ - "public" - ], - "summary": "Read Shared Dataset Examples With Runs", - "description": "Get examples with associated runs from sessions in a dataset that has been shared.", - "operationId": "read_shared_dataset_examples_with_runs_api_v1_public__share_token__examples_runs_post", - "parameters": [ - { - "name": "share_token", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Share Token" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryExampleSchemaWithRuns" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "$ref": "#/components/schemas/PublicExampleWithRuns" - } - }, - { - "type": "array", - "items": { - "$ref": "#/components/schemas/ExampleWithRunsCH" - } - } - ], - "title": "Response Read Shared Dataset Examples With Runs Api V1 Public Share Token Examples Runs Post" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/public/{share_token}/datasets/runs/delta": { - "post": { - "tags": [ - "public" - ], - "summary": "Read Shared Delta", - "description": "Fetch the number of regressions/improvements for each example in a dataset, between sessions[0] and sessions[1].", - "operationId": "read_shared_delta_api_v1_public__share_token__datasets_runs_delta_post", - "parameters": [ - { - "name": "share_token", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Share Token" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryFeedbackDelta" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SessionFeedbackDelta" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/public/{share_token}/datasets/runs/delta/stream": { - "post": { - "tags": [ - "public" - ], - "summary": "Read Shared Delta Stream", - "description": "Stream feedback deltas for multiple feedback keys.\n\nReturns results in chunks as they become available. Each chunk contains\nresults for one or more feedback keys. Errors for individual chunks are\nincluded in the response rather than failing the entire operation.\n\nResponse format (SSE):\n event: data\n data: {\"feedback_deltas\": {\"key1\": {session_id: {...}}, ...}, \"errors\": null}\n\n event: data\n data: {\"feedback_deltas\": {\"key2\": {...}}, \"errors\": null}\n\n event: end", - "operationId": "read_shared_delta_stream_api_v1_public__share_token__datasets_runs_delta_stream_post", - "parameters": [ - { - "name": "share_token", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Share Token" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryFeedbackDeltaBatch" - } - } - } }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } + "x-public": true } }, "/api/v1/public/{share_token}/datasets/runs/query": { @@ -12318,7 +12712,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/datasets/runs/generate-query": { @@ -12372,7 +12767,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/datasets/runs/stats": { @@ -12400,7 +12796,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RunStatsQueryParams" + "$ref": "#/components/schemas/RunStatsQueryParamsPublic" } } } @@ -12426,7 +12822,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/datasets/runs/{run_id}": { @@ -12490,7 +12887,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/datasets/feedback": { @@ -12707,7 +13105,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/{share_token}/datasets/comparative": { @@ -12829,7 +13228,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/schemas/{version}/message.json": { @@ -12869,7 +13269,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/public/schemas/{version}/tooldef.json": { @@ -12909,7 +13310,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues": { @@ -13125,7 +13527,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -13175,7 +13578,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -13230,7 +13634,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/populate": { @@ -13281,7 +13686,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}": { @@ -13333,7 +13739,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -13393,7 +13800,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -13445,7 +13853,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/runs": { @@ -13455,6 +13864,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": [] @@ -13476,6 +13886,16 @@ "format": "uuid", "title": "Queue Id" } + }, + { + "name": "extend_trace_retention", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Extend Trace Retention" + } } ], "requestBody": { @@ -13534,7 +13954,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -13542,6 +13963,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": [] @@ -13666,7 +14088,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/runs/by-key": { @@ -13675,7 +14098,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": [] @@ -13697,6 +14122,16 @@ "format": "uuid", "title": "Queue Id" } + }, + { + "name": "extend_trace_retention", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Extend Trace Retention" + } } ], "requestBody": { @@ -13738,7 +14173,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/export": { @@ -13800,7 +14236,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/run/{index}": { @@ -13811,6 +14248,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": [] @@ -13874,7 +14312,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{run_id}/queues": { @@ -13932,7 +14371,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/runs/{queue_run_id}": { @@ -13942,6 +14382,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": [] @@ -14004,7 +14445,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -14012,6 +14454,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": [] @@ -14064,7 +14507,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/runs/delete": { @@ -14074,6 +14518,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": [] @@ -14126,7 +14571,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/total_size": { @@ -14136,6 +14582,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": [] @@ -14180,7 +14627,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/total_archived": { @@ -14190,6 +14638,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": [] @@ -14268,7 +14717,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/size": { @@ -14278,6 +14728,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": [] @@ -14343,7 +14794,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/status/{annotation_queue_run_id}": { @@ -14353,6 +14805,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": [] @@ -14405,7 +14858,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/annotation-queues/{queue_id}/runs/resolve/{queue_run_id}": { @@ -14416,6 +14870,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": [] @@ -14470,7 +14925,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/ace/execute": { @@ -14525,7 +14981,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/bulk-exports": { @@ -14536,22 +14993,83 @@ "summary": "Get Bulk Exports", "description": "Get the current workspace's bulk exports", "operationId": "get_bulk_exports_api_v1_bulk_exports_get", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "maximum": 1000, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { + "type": "array", "items": { "$ref": "#/components/schemas/BulkExport" }, - "type": "array", "title": "Response Get Bulk Exports Api V1 Bulk Exports Get" } } } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } }, + "x-public": true + }, + "post": { + "tags": [ + "bulk-exports" + ], + "summary": "Create Bulk Export", + "description": "Create a new bulk export", + "operationId": "create_bulk_export_api_v1_bulk_exports_post", "security": [ { "API Key": [] @@ -14562,24 +15080,16 @@ { "Bearer Auth": [] } - ] - }, - "post": { - "tags": [ - "bulk-exports" ], - "summary": "Create Bulk Export", - "description": "Create a new bulk export", - "operationId": "create_bulk_export_api_v1_bulk_exports_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BulkExportCreate" } } - }, - "required": true + } }, "responses": { "200": { @@ -14603,17 +15113,7 @@ } } }, - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ] + "x-public": true } }, "/api/v1/bulk-exports/destinations": { @@ -14650,7 +15150,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -14701,7 +15202,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/bulk-exports/runs": { @@ -14710,7 +15212,7 @@ "bulk-exports" ], "summary": "Get Bulk Export Runs Filtered", - "description": "Get all bulk export runs for exports that were created from a scheduled bulk export", + "description": "Get bulk export runs for exports that were created from a scheduled bulk export", "operationId": "get_bulk_export_runs_filtered_api_v1_bulk_exports_runs_get", "security": [ { @@ -14733,6 +15235,35 @@ "format": "uuid", "title": "Source Bulk Export Id" } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "maximum": 1000, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } } ], "responses": { @@ -14760,7 +15291,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/bulk-exports/{bulk_export_id}": { @@ -14815,7 +15347,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -14878,7 +15411,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/bulk-exports/destinations/{destination_id}": { @@ -14933,7 +15467,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -14996,7 +15531,58 @@ } } } - } + }, + "x-public": true + }, + "delete": { + "tags": [ + "bulk-exports" + ], + "summary": "Delete Bulk Export Destination", + "description": "Delete a bulk export destination that is not used by any bulk export", + "operationId": "delete_bulk_export_destination_api_v1_bulk_exports_destinations__destination_id__delete", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "destination_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Destination Id" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "409": { + "description": "The destination is used by one or more bulk exports and cannot be deleted." + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true } }, "/api/v1/bulk-exports/{bulk_export_id}/runs": { @@ -15028,6 +15614,35 @@ "format": "uuid", "title": "Bulk Export Id" } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer", + "maximum": 1000, + "minimum": 1 + }, + { + "type": "null" + } + ], + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } } ], "responses": { @@ -15055,7 +15670,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/bulk-exports/{bulk_export_id}/runs/{run_id}": { @@ -15120,7 +15736,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/feedback-configs": { @@ -15226,6 +15843,36 @@ "default": false, "title": "Read After Write" } + }, + { + "name": "is_enforced", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Only enforced configs when true, only unenforced when false.", + "title": "Is Enforced" + }, + "description": "Only enforced configs when true, only unenforced when false." + }, + { + "name": "include_all_configs", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Return every config of each key, deleted ones included, instead of one config per key. Pages of up to 100 configs unless ``limit`` is set; ``X-Pagination-Total`` gives the full count.", + "default": false, + "title": "Include All Configs" + }, + "description": "Return every config of each key, deleted ones included, instead of one config per key. Pages of up to 100 configs unless ``limit`` is set; ``X-Pagination-Total`` gives the full count." } ], "responses": { @@ -15253,7 +15900,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -15303,7 +15951,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -15353,14 +16002,15 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ "feedback-configs" ], "summary": "Delete Feedback Config Endpoint", - "description": "Soft delete a feedback config by marking it as deleted.\n\nThe config can be recreated later with the same key (simple reuse pattern).\nExisting feedback records with this key will remain unchanged.", + "description": "Soft delete one feedback config by id, or every config of a feedback key.\n\nThe config can be recreated later with the same key (simple reuse pattern).\nExisting feedback records with this key will remain unchanged. Deleting an\nenforced config turns off its enforcement instead of removing it, and needs\nthe feedback-configs:manage-enforced permission.\nDeleting an unenforced config that an annotation queue uses is refused.", "operationId": "delete_feedback_config_endpoint_api_v1_feedback_configs_delete", "security": [ { @@ -15377,17 +16027,47 @@ { "name": "feedback_key", "in": "query", - "required": true, + "required": false, "schema": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Feedback Key" } + }, + { + "name": "id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Id" + } } ], "responses": { "204": { "description": "Successful Response" }, + "400": { + "description": "Pass exactly one of id or feedback_key." + }, + "409": { + "description": "An annotation queue uses an unenforced config being deleted." + }, "422": { "description": "Validation Error", "content": { @@ -15398,7 +16078,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/model-price-map": { @@ -15408,16 +16089,6 @@ ], "summary": "Read Model Price Map", "operationId": "read_model_price_map_api_v1_model_price_map_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, "security": [ { "API Key": [] @@ -15428,30 +16099,119 @@ { "Bearer Auth": [] } - ] - }, - "post": { - "tags": [ - "model-price-map" ], - "summary": "Create New Model Price", - "operationId": "create_new_model_price_api_v1_model_price_map_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ModelPriceMapCreateSchema" - } + "parameters": [ + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" } }, - "required": true - }, + { + "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" + } + }, + { + "name": "provider", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "maxItems": 20 + }, + { + "type": "null" + } + ], + "description": "Only return price maps for these providers (case-insensitive).", + "title": "Provider" + }, + "description": "Only return price maps for these providers (case-insensitive)." + }, + { + "name": "sort_by", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "const": "start_time", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Field to sort on. Defaults to match priority order.", + "title": "Sort By" + }, + "description": "Field to sort on. Defaults to match priority order." + }, + { + "name": "sort_order", + "in": "query", + "required": false, + "schema": { + "enum": [ + "asc", + "desc" + ], + "type": "string", + "description": "Sort direction for sort_by. Unset start dates sort last.", + "default": "desc", + "title": "Sort Order" + }, + "description": "Sort direction for sort_by. Unset start dates sort last." + } + ], "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" + } } } }, @@ -15466,26 +16226,14 @@ } } }, - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ] - } - }, - "/api/v1/model-price-map/{id}": { - "put": { + "x-public": true + }, + "post": { "tags": [ "model-price-map" ], - "summary": "Update Model Price", - "operationId": "update_model_price_api_v1_model_price_map__id__put", + "summary": "Create New Model Price", + "operationId": "create_new_model_price_api_v1_model_price_map_post", "security": [ { "API Key": [] @@ -15497,24 +16245,12 @@ "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" + "$ref": "#/components/schemas/ModelPriceMapCreateSchema" } } } @@ -15538,14 +16274,17 @@ } } } - } - }, - "delete": { + }, + "x-public": true + } + }, + "/api/v1/model-price-map/{id}": { + "put": { "tags": [ "model-price-map" ], - "summary": "Delete Model Price", - "operationId": "delete_model_price_api_v1_model_price_map__id__delete", + "summary": "Update Model Price", + "operationId": "update_model_price_api_v1_model_price_map__id__put", "security": [ { "API Key": [] @@ -15569,6 +16308,16 @@ } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ModelPriceMapUpdateSchema" + } + } + } + }, "responses": { "200": { "description": "Successful Response", @@ -15588,26 +16337,38 @@ } } } - } - } - }, - "/api/v1/prompts/invoke_prompt": { - "post": { + }, + "x-public": true + }, + "delete": { "tags": [ - "prompts" + "model-price-map" ], - "summary": "Invoke Prompt", - "operationId": "invoke_prompt_api_v1_prompts_invoke_prompt_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InvokePromptPayload" - } - } + "summary": "Delete Model Price", + "operationId": "delete_model_price_api_v1_model_price_map__id__delete", + "security": [ + { + "API Key": [] }, - "required": true - }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Id" + } + } + ], "responses": { "200": { "description": "Successful Response", @@ -15627,21 +16388,22 @@ } } } - } + }, + "x-public": true } }, - "/api/v1/prompts/canvas": { + "/api/v1/prompts/invoke_prompt": { "post": { "tags": [ "prompts" ], - "summary": "Prompt Canvas", - "operationId": "prompt_canvas_api_v1_prompts_canvas_post", + "summary": "Invoke Prompt", + "operationId": "invoke_prompt_api_v1_prompts_invoke_prompt_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PlaygroundPromptCanvasPayload" + "$ref": "#/components/schemas/InvokePromptPayload" } } }, @@ -15667,17 +16429,7 @@ } } }, - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ] + "x-public": true } }, "/api/v1/prompt-webhooks": { @@ -15714,14 +16466,15 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ "prompt-webhooks" ], "summary": "Create Prompt Webhook", - "description": "Create a new prompt webhook.", + "description": "Create a new prompt webhook.\n\nLangSmith sends a POST request to the webhook URL for each event listed in\ntriggers on the prompts it matches. A workspace can have one prompt webhook\nunless its limit was raised; creating one past the limit returns 400.", "operationId": "create_prompt_webhook_api_v1_prompt_webhooks_post", "requestBody": { "content": { @@ -15765,7 +16518,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/prompt-webhooks/{webhook_id}": { @@ -15820,14 +16574,15 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ "prompt-webhooks" ], "summary": "Update Prompt Webhook", - "description": "Update a specific prompt webhook.", + "description": "Update a specific prompt webhook.\n\nOmitted fields keep their current values; list fields and headers that are\nset replace the stored values.", "operationId": "update_prompt_webhook_api_v1_prompt_webhooks__webhook_id__patch", "security": [ { @@ -15883,7 +16638,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -15916,13 +16672,8 @@ } ], "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } + "204": { + "description": "Successful Response" }, "422": { "description": "Validation Error", @@ -15934,7 +16685,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/prompt-webhooks/test": { @@ -15943,7 +16695,7 @@ "prompt-webhooks" ], "summary": "Test Prompt Webhook", - "description": "Test a specific prompt webhook.", + "description": "Test a specific prompt webhook.\n\nSends the sample payload to the webhook configuration in the request body\nwithout saving it, but only if the webhook's triggers include the payload's\nevent and its prompt filters match the payload's prompt. Otherwise nothing\nis sent. Fails if the destination does not accept the payload.", "operationId": "test_prompt_webhook_api_v1_prompt_webhooks_test_post", "requestBody": { "content": { @@ -15991,33 +16743,18 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/playground-settings": { - "get": { + "post": { "tags": [ "playground-settings" ], - "summary": "List Playground Settings", - "description": "Get all playground settings for this tenant id.", - "operationId": "list_playground_settings_api_v1_playground_settings_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/PlaygroundSettingsResponse" - }, - "type": "array", - "title": "Response List Playground Settings Api V1 Playground Settings Get" - } - } - } - } - }, + "summary": "Create Playground Settings", + "description": "Create playground settings.", + "operationId": "create_playground_settings_api_v1_playground_settings_post", "security": [ { "API Key": [] @@ -16025,27 +16762,22 @@ { "Tenant ID": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } - ] - }, - "post": { - "tags": [ - "playground-settings" ], - "summary": "Create Playground Settings", - "description": "Create playground settings.", - "operationId": "create_playground_settings_api_v1_playground_settings_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PlaygroundSettingsCreateRequest" } } - }, - "required": true + } }, "responses": { "200": { @@ -16069,6 +16801,15 @@ } } }, + "x-public": true + }, + "get": { + "tags": [ + "playground-settings" + ], + "summary": "List Playground Settings", + "description": "Get all playground settings for this tenant id.", + "operationId": "list_playground_settings_api_v1_playground_settings_get", "security": [ { "API Key": [] @@ -16076,10 +16817,62 @@ { "Tenant ID": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } - ] + ], + "parameters": [ + { + "name": "scope", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "enum": [ + "workspace", + "organization" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Scope" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PlaygroundSettingsResponse" + }, + "title": "Response List Playground Settings Api V1 Playground Settings Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true } }, "/api/v1/playground-settings/{playground_settings_id}": { @@ -16097,6 +16890,9 @@ { "Tenant ID": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } @@ -16108,6 +16904,7 @@ "required": true, "schema": { "type": "string", + "format": "uuid", "title": "Playground Settings Id" } } @@ -16133,7 +16930,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -16149,6 +16947,9 @@ { "Tenant ID": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } @@ -16160,6 +16961,7 @@ "required": true, "schema": { "type": "string", + "format": "uuid", "title": "Playground Settings Id" } } @@ -16195,7 +16997,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -16211,6 +17014,9 @@ { "Tenant ID": [] }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } @@ -16222,6 +17028,7 @@ "required": true, "schema": { "type": "string", + "format": "uuid", "title": "Playground Settings Id" } } @@ -16245,7 +17052,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/charts/section/clone": { @@ -16298,7 +17106,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/charts/section": { @@ -16460,7 +17269,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -16511,7 +17321,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/charts": { @@ -16564,7 +17375,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/charts/preview": { @@ -16617,7 +17429,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/charts/create": { @@ -16626,13 +17439,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" + } + } } } }, @@ -16644,7 +17477,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" + } + } } } } @@ -16670,7 +17523,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/charts/{chart_id}": { @@ -16679,7 +17533,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": [ { @@ -16720,7 +17574,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" } } } @@ -16735,14 +17609,15 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ "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": [ { @@ -16783,7 +17658,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" } } } @@ -16798,7 +17693,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -16849,7 +17745,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/charts/section/{section_id}": { @@ -16914,7 +17811,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -16977,7 +17875,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -17028,7 +17927,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/org-charts/section": { @@ -17037,8 +17937,19 @@ "charts" ], "summary": "Org Read Sections", - "description": "Get all sections for the tenant.", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", "operationId": "org_read_sections_api_v1_org_charts_section_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "deprecated": true, "security": [ { "API Key": [] @@ -17050,155 +17961,26 @@ "Bearer Auth": [] } ], - "parameters": [ - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "maximum": 100, - "minimum": 1, - "default": 100, - "title": "Limit" - } - }, - { - "name": "offset", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "minimum": 0, - "default": 0, - "title": "Offset" - } - }, - { - "name": "title_contains", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Title Contains" - } - }, - { - "name": "ids", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - { - "type": "null" - } - ], - "title": "Ids" - } - }, - { - "name": "sort_by", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": "created_at", - "title": "Sort By" - } - }, - { - "name": "sort_by_desc", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": true, - "title": "Sort By Desc" - } - }, - { - "name": "tag_value_id", - "in": "query", - "required": false, - "schema": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - { - "type": "null" - } - ], - "title": "Tag Value Id" - } - } + "x-public": true + }, + "post": { + "tags": [ + "charts" ], + "summary": "Org Create Section", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", + "operationId": "org_create_section_api_v1_org_charts_section_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CustomChartsSectionResponse" - }, - "title": "Response Org Read Sections Api V1 Org Charts Section Get" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "schema": {} } } } - } - }, - "post": { - "tags": [ - "charts" - ], - "summary": "Org Create Section", - "description": "Create a new section.", - "operationId": "org_create_section_api_v1_org_charts_section_post", + }, + "deprecated": true, "security": [ { "API Key": [] @@ -17210,38 +17992,7 @@ "Bearer Auth": [] } ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsSectionCreate" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsSectionResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } + "x-public": true } }, "/api/v1/org-charts": { @@ -17250,40 +18001,19 @@ "charts" ], "summary": "Org Read Charts", - "description": "Get all charts for the tenant.", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", "operationId": "org_read_charts_api_v1_org_charts_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "schema": {} } } } }, + "deprecated": true, "security": [ { "API Key": [] @@ -17294,7 +18024,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/org-charts/preview": { @@ -17303,40 +18034,19 @@ "charts" ], "summary": "Org Read Chart Preview", - "description": "Get a preview for a chart without actually creating it.", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", "operationId": "org_read_chart_preview_api_v1_org_charts_preview_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartPreviewRequest" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/SingleCustomChartResponseBase" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "schema": {} } } } }, + "deprecated": true, "security": [ { "API Key": [] @@ -17347,7 +18057,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/org-charts/create": { @@ -17356,40 +18067,19 @@ "charts" ], "summary": "Org Create Chart", - "description": "Create a new chart.", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", "operationId": "org_create_chart_api_v1_org_charts_create_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartCreate" - } - } - }, - "required": true - }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "schema": {} } } } }, + "deprecated": true, "security": [ { "API Key": [] @@ -17400,7 +18090,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/org-charts/{chart_id}": { @@ -17409,8 +18100,19 @@ "charts" ], "summary": "Org Read Single Chart", - "description": "Get a single chart by ID.", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", "operationId": "org_read_single_chart_api_v1_org_charts__chart_id__post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "deprecated": true, "security": [ { "API Key": [] @@ -17422,58 +18124,26 @@ "Bearer Auth": [] } ], - "parameters": [ - { - "name": "chart_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Chart Id" - } - } + "x-public": true + }, + "delete": { + "tags": [ + "charts" ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsRequest" - } - } - } - }, + "summary": "Org Delete Chart", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", + "operationId": "org_delete_chart_api_v1_org_charts__chart_id__delete", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/SingleCustomChartResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "schema": {} } } } - } - }, - "patch": { - "tags": [ - "charts" - ], - "summary": "Org Update Chart", - "description": "Update a chart.", - "operationId": "org_update_chart_api_v1_org_charts__chart_id__patch", + }, + "deprecated": true, "security": [ { "API Key": [] @@ -17485,58 +18155,26 @@ "Bearer Auth": [] } ], - "parameters": [ - { - "name": "chart_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Chart Id" - } - } + "x-public": true + }, + "patch": { + "tags": [ + "charts" ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartUpdate" - } - } - } - }, + "summary": "Org Update Chart", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", + "operationId": "org_update_chart_api_v1_org_charts__chart_id__patch", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } + "schema": {} } } } - } - }, - "delete": { - "tags": [ - "charts" - ], - "summary": "Org Delete Chart", - "description": "Delete a chart.", - "operationId": "org_delete_chart_api_v1_org_charts__chart_id__delete", + }, + "deprecated": true, "security": [ { "API Key": [] @@ -17548,18 +18186,17 @@ "Bearer Auth": [] } ], - "parameters": [ - { - "name": "chart_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Chart Id" - } - } + "x-public": true + } + }, + "/api/v1/org-charts/section/{section_id}": { + "post": { + "tags": [ + "charts" ], + "summary": "Org Read Single Section", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", + "operationId": "org_read_single_section_api_v1_org_charts_section__section_id__post", "responses": { "200": { "description": "Successful Response", @@ -17568,28 +18205,9 @@ "schema": {} } } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } } - } - } - }, - "/api/v1/org-charts/section/{section_id}": { - "post": { - "tags": [ - "charts" - ], - "summary": "Org Read Single Section", - "description": "Get a single section by ID.", - "operationId": "org_read_single_section_api_v1_org_charts_section__section_id__post", + }, + "deprecated": true, "security": [ { "API Key": [] @@ -17601,58 +18219,57 @@ "Bearer Auth": [] } ], - "parameters": [ - { - "name": "section_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Section Id" - } - } + "x-public": true + }, + "delete": { + "tags": [ + "charts" ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsRequestBase" - } - } - } - }, + "summary": "Org Delete Section", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", + "operationId": "org_delete_section_api_v1_org_charts_section__section_id__delete", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsSection" - } + "schema": {} } } + } + }, + "deprecated": true, + "security": [ + { + "API Key": [] }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } + { + "Organization ID": [] + }, + { + "Bearer Auth": [] } - } + ], + "x-public": true }, "patch": { "tags": [ "charts" ], "summary": "Org Update Section", - "description": "Update a section.", + "description": "Deprecated: organization usage charts have been retired (HTTP 410).", "operationId": "org_update_section_api_v1_org_charts_section__section_id__patch", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "deprecated": true, "security": [ { "API Key": [] @@ -17664,112 +18281,18 @@ "Bearer Auth": [] } ], - "parameters": [ - { - "name": "section_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Section Id" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsSectionUpdate" - } - } - } - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CustomChartsSectionResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - }, - "delete": { - "tags": [ - "charts" - ], - "summary": "Org Delete Section", - "description": "Delete a section.", - "operationId": "org_delete_section_api_v1_org_charts_section__section_id__delete", - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] - }, - { - "Bearer Auth": [] - } - ], - "parameters": [ - { - "name": "section_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "uuid", - "title": "Section Id" - } - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, - "/api/v1/mcp/tools": { - "get": { - "tags": [ - "mcp" - ], - "summary": "Get Tools", - "description": "Return MCP tools — from cache if fresh, otherwise by fetching from remote.\n\nOn cache miss, tries manifest fetch first (fast), then falls back to full\nMCP handshake. Caches the result before returning.\n\nPass force_refresh=true to bypass the cache and always fetch from the\nremote server (the result is still cached via upsert for future requests).\n\nThe ls_user_id query parameter allows service-key callers (which don't carry\nls_user_id in auth) to specify the user for per-user OAuth cache lookups.", - "operationId": "get_tools_api_v1_mcp_tools_get", - "security": [ + "x-public": true + } + }, + "/api/v1/mcp/tools": { + "get": { + "tags": [ + "mcp" + ], + "summary": "Get Tools", + "description": "Return MCP tools — from cache if fresh, otherwise by fetching from remote.\n\nOn cache miss, tries manifest fetch first (fast), then falls back to full\nMCP handshake. Caches the result before returning.\n\nPass force_refresh=true to bypass the cache and always fetch from the\nremote server (the result is still cached via upsert for future requests).\n\n``agent_id`` lets deployment/service-key callers name an agent OAuth\nsubject. ``ls_user_id`` overrides are limited to service identities.", + "operationId": "get_tools_api_v1_mcp_tools_get", + "security": [ { "API Key": [] }, @@ -17822,6 +18345,22 @@ "title": "Ls User Id" } }, + { + "name": "agent_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Agent Id" + } + }, { "name": "force_refresh", "in": "query", @@ -17852,7 +18391,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -17934,7 +18474,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/mcp/proxy": { @@ -18005,7 +18546,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -18053,7 +18595,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs": { @@ -18116,7 +18659,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -18160,7 +18704,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/setup": { @@ -18192,7 +18737,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current": { @@ -18224,7 +18770,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/info": { @@ -18256,7 +18803,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "patch": { "tags": [ @@ -18306,7 +18854,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/billing": { @@ -18338,7 +18887,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/dashboard": { @@ -18406,7 +18956,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/payment-method": { @@ -18456,7 +19007,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/business-info": { @@ -18488,7 +19040,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -18536,7 +19089,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/plan": { @@ -18586,7 +19140,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/roles": { @@ -18622,7 +19177,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -18672,7 +19228,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/roles/{role_id}": { @@ -18726,7 +19283,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -18788,7 +19346,73 @@ } } } - } + }, + "x-public": true + } + }, + "/api/v1/orgs/current/roles/{role_id}/restriction": { + "put": { + "tags": [ + "orgs" + ], + "summary": "Set Role Restriction", + "operationId": "set_role_restriction_api_v1_orgs_current_roles__role_id__restriction_put", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "role_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Role Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleRestrictionUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true } }, "/api/v1/orgs/permissions": { @@ -18818,7 +19442,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/pending": { @@ -18849,7 +19474,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/members": { @@ -18881,7 +19507,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -18931,7 +19558,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/members/active": { @@ -19101,7 +19729,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/members/pending": { @@ -19226,7 +19855,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/members/batch": { @@ -19287,7 +19917,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/members/basic/batch": { @@ -19348,7 +19979,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/members/{identity_id}/pending": { @@ -19401,39 +20033,57 @@ } } } - } - } - }, - "/api/v1/orgs/pending/{organization_id}": { - "delete": { + }, + "x-public": true + }, + "patch": { "tags": [ "orgs" ], - "summary": "Delete Pending Organization Invite", - "operationId": "delete_pending_organization_invite_api_v1_orgs_pending__organization_id__delete", + "summary": "Patch Current Org Pending Member", + "description": "Update the role on a pending org member invite.", + "operationId": "patch_current_org_pending_member_api_v1_orgs_current_members__identity_id__pending_patch", "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, { "Bearer Auth": [] } ], "parameters": [ { - "name": "organization_id", + "name": "identity_id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid", - "title": "Organization Id" + "title": "Identity Id" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PendingIdentityPatch" + } + } + } + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/OrgPendingIdentity" + } } } }, @@ -19447,16 +20097,64 @@ } } } - } + }, + "x-public": true } }, - "/api/v1/orgs/pending/{organization_id}/claim": { - "post": { + "/api/v1/orgs/pending/{organization_id}": { + "delete": { "tags": [ "orgs" ], - "summary": "Claim Pending Organization Invite", - "operationId": "claim_pending_organization_invite_api_v1_orgs_pending__organization_id__claim_post", + "summary": "Delete Pending Organization Invite", + "operationId": "delete_pending_organization_invite_api_v1_orgs_pending__organization_id__delete", + "security": [ + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "organization_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Organization Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/orgs/pending/{organization_id}/claim": { + "post": { + "tags": [ + "orgs" + ], + "summary": "Claim Pending Organization Invite", + "operationId": "claim_pending_organization_invite_api_v1_orgs_pending__organization_id__claim_post", "security": [ { "Bearer Auth": [] @@ -19495,7 +20193,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/members/{identity_id}": { @@ -19548,7 +20247,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -19609,7 +20309,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/members/basic": { @@ -19660,7 +20361,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/sso-settings": { @@ -19697,7 +20399,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -19748,7 +20451,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/sso-settings/{id}": { @@ -19813,7 +20517,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -19866,7 +20571,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/login-methods": { @@ -19921,7 +20627,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/billing/usage": { @@ -19999,7 +20706,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/billing/granular-usage": { @@ -20008,7 +20716,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": [ { @@ -20045,13 +20753,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" } }, @@ -20111,7 +20826,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/billing/granular-usage/export": { @@ -20157,13 +20873,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" } }, @@ -20221,7 +20944,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/user/login-methods": { @@ -20258,7 +20982,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/orgs/current/stripe_checkout_session": { @@ -20309,36 +21034,121 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, - "/api/v1/orgs/current/stripe_account_links": { + "/api/v1/orgs/current/service-keys": { + "get": { + "tags": [ + "orgs" + ], + "summary": "List Org Service Keys", + "operationId": "list_org_service_keys_api_v1_orgs_current_service_keys_get", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "workspace_ids", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "default": [], + "title": "Workspace Ids" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIKeyGetResponse" + }, + "title": "Response List Org Service Keys Api V1 Orgs Current Service Keys Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + }, "post": { "tags": [ "orgs" ], - "summary": "Create Stripe Account Links Endpoint", - "description": "Kick off a Stripe account link flow.", - "operationId": "create_stripe_account_links_endpoint_api_v1_orgs_current_stripe_account_links_post", + "summary": "Create Org Service Key", + "description": "Create org-scoped service key. If workspaces is None, key is org-wide.", + "operationId": "create_org_service_key_api_v1_orgs_current_service_keys_post", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/StripeAccountLinksCreate" + "$ref": "#/components/schemas/APIKeyCreateRequest" } } - }, - "required": true + } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/APIKeyCreateResponse" + } } } }, + "403": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + }, + "description": "Insufficient permission or the organization blocks API keys from creating other API keys." + }, "422": { "description": "Validation Error", "content": { @@ -20350,6 +21160,17 @@ } } }, + "x-public": true + } + }, + "/api/v1/orgs/current/tracing-keys": { + "get": { + "tags": [ + "orgs" + ], + "summary": "List Org Tracing Keys", + "description": "List your tracing keys and keys visible through organization/workspace access.", + "operationId": "list_org_tracing_keys_api_v1_orgs_current_tracing_keys_get", "security": [ { "API Key": [] @@ -20360,32 +21181,82 @@ { "Bearer Auth": [] } - ] - } - }, - "/api/v1/orgs/current/service-keys": { - "get": { - "tags": [ - "orgs" ], - "summary": "List Org Service Keys", - "operationId": "list_org_service_keys_api_v1_orgs_current_service_keys_get", + "parameters": [ + { + "name": "workspace_ids", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "default": [], + "title": "Workspace Ids" + } + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "default": 50, + "title": "Page Size" + } + }, + { + "name": "cursor", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string", + "maxLength": 1024 + }, + { + "type": "null" + } + ], + "title": "Cursor" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/APIKeyGetResponse" - }, - "type": "array", - "title": "Response List Org Service Keys Api V1 Orgs Current Service Keys Get" + "$ref": "#/components/schemas/TracingKeyListResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" } } } } }, + "x-public": true + }, + "post": { + "tags": [ + "orgs" + ], + "summary": "Create Org Tracing Key", + "operationId": "create_org_tracing_key_api_v1_orgs_current_tracing_keys_post", "security": [ { "API Key": [] @@ -20396,27 +21267,19 @@ { "Bearer Auth": [] } - ] - }, - "post": { - "tags": [ - "orgs" ], - "summary": "Create Org Service Key", - "description": "Create org-scoped service key. If workspaces is None, key is org-wide.", - "operationId": "create_org_service_key_api_v1_orgs_current_service_keys_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/APIKeyCreateRequest" + "$ref": "#/components/schemas/TracingKeyCreateRequest" } } - }, - "required": true + } }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { @@ -20424,6 +21287,13 @@ "$ref": "#/components/schemas/APIKeyCreateResponse" } } + }, + "headers": { + "Location": { + "schema": { + "type": "string" + } + } } }, "422": { @@ -20437,26 +21307,65 @@ } } }, - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] - }, - { - "Bearer Auth": [] - } - ] + "x-public": true } }, - "/api/v1/orgs/current/service-keys/{api_key_id}": { + "/api/v1/orgs/current/tracing-keys/{api_key_id}": { "delete": { "tags": [ "orgs" ], - "summary": "Delete Org Service Key", - "operationId": "delete_org_service_key_api_v1_orgs_current_service_keys__api_key_id__delete", + "summary": "Delete Org Tracing Key", + "description": "Revoke your tracing key, or one you have permission to manage.", + "operationId": "delete_org_tracing_key_api_v1_orgs_current_tracing_keys__api_key_id__delete", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "api_key_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Api Key Id" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + } + }, + "/api/v1/orgs/current/service-keys/{api_key_id}": { + "delete": { + "tags": [ + "orgs" + ], + "summary": "Delete Org Service Key", + "operationId": "delete_org_service_key_api_v1_orgs_current_service_keys__api_key_id__delete", "security": [ { "API Key": [] @@ -20501,14 +21410,15 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ "orgs" ], "summary": "Update Org Service Key", - "description": "Update an API key's role(s) in place without rotating the key.\n\nRestricted to org admins (ORGANIZATION_MANAGE). Applies to both\norg-scoped and workspace-scoped keys listed in /orgs/current/service-keys.", + "description": "Update an API key's role(s) in place without rotating the key.\n\nOrganization Operators cannot assign the Organization Admin role or change\na key that already holds it, and no key can change its own roles.\nWorkspace-scoped keys also require key-management permission in every\nworkspace they cover. Applies to both org-scoped and workspace-scoped keys.", "operationId": "update_org_service_key_api_v1_orgs_current_service_keys__api_key_id__patch", "security": [ { @@ -20564,7 +21474,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/orgs/current/personal-access-tokens": { @@ -20574,22 +21485,67 @@ ], "summary": "List Org Personal Access Tokens", "operationId": "list_org_personal_access_tokens_api_v1_orgs_current_personal_access_tokens_get", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "workspace_ids", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "default": [], + "title": "Workspace Ids" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { + "type": "array", "items": { "$ref": "#/components/schemas/APIKeyGetResponse" }, - "type": "array", "title": "Response List Org Personal Access Tokens Api V1 Orgs Current Personal Access Tokens Get" } } } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } }, + "x-public": true + }, + "post": { + "tags": [ + "orgs" + ], + "summary": "Create Org Personal Access Token", + "operationId": "create_org_personal_access_token_api_v1_orgs_current_personal_access_tokens_post", "security": [ { "API Key": [] @@ -20600,23 +21556,16 @@ { "Bearer Auth": [] } - ] - }, - "post": { - "tags": [ - "orgs" ], - "summary": "Create Org Personal Access Token", - "operationId": "create_org_personal_access_token_api_v1_orgs_current_personal_access_tokens_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/APIKeyCreateRequest" } } - }, - "required": true + } }, "responses": { "200": { @@ -20629,6 +21578,16 @@ } } }, + "403": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + }, + "description": "Insufficient permission, PAT creation is disabled, or the organization blocks API keys from creating other API keys." + }, "422": { "description": "Validation Error", "content": { @@ -20640,6 +21599,17 @@ } } }, + "x-public": true + } + }, + "/api/v1/orgs/current/members/personal-access-tokens": { + "get": { + "tags": [ + "orgs" + ], + "summary": "List All Org Personal Access Tokens", + "description": "List every organization member's personal access tokens.", + "operationId": "list_all_org_personal_access_tokens_api_v1_orgs_current_members_personal_access_tokens_get", "security": [ { "API Key": [] @@ -20650,7 +21620,60 @@ { "Bearer Auth": [] } - ] + ], + "parameters": [ + { + "name": "workspace_ids", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "default": [], + "title": "Workspace Ids" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIKeyGetResponse" + }, + "title": "Response List All Org Personal Access Tokens Api V1 Orgs Current Members Personal Access Tokens Get" + } + } + } + }, + "403": { + "description": "The caller may not view other members' tokens.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true } }, "/api/v1/orgs/current/personal-access-tokens/{pat_id}": { @@ -20659,6 +21682,7 @@ "orgs" ], "summary": "Delete Org Personal Access Token", + "description": "Delete a personal access token, removing the record entirely.\n\nCallers may always delete their own tokens; organization admins may delete\nany member's.", "operationId": "delete_org_personal_access_token_api_v1_orgs_current_personal_access_tokens__pat_id__delete", "security": [ { @@ -20694,6 +21718,16 @@ } } }, + "404": { + "description": "The personal access token does not exist, or belongs to another member and the caller may not administer other members' tokens.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -20704,7 +21738,131 @@ } } } - } + }, + "x-public": true + } + }, + "/api/v1/orgs/current/personal-access-tokens/{pat_id}/revocation": { + "post": { + "tags": [ + "orgs" + ], + "summary": "Revoke Org Personal Access Token", + "description": "Revoke a personal access token, so it stops working but its record remains.\n\nThe token is marked revoked rather than deleted, and stops authenticating as\nsoon as its cached auth entry refreshes. Its expiry is left untouched, so the\nrevocation can be lifted by deleting it. Callers may always revoke their own\ntokens; organization admins may revoke any member's.", + "operationId": "revoke_org_personal_access_token_api_v1_orgs_current_personal_access_tokens__pat_id__revocation_post", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "pat_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Pat Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIKeyGetResponse" + } + } + } + }, + "404": { + "description": "The personal access token does not exist, or belongs to another member and the caller may not administer other members' tokens.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + }, + "delete": { + "tags": [ + "orgs" + ], + "summary": "Reinstate Org Personal Access Token", + "description": "Lift a revocation, so the personal access token authenticates again.\n\nThe token returns to the expiry it was created with, and one whose expiry has\nsince passed stays expired. If the token was used while revoked, it starts\nworking again once the rejection leaves the authentication cache. Lifting a\nrevocation that is not there changes nothing. Callers may always administer\ntheir own tokens; organization admins may administer any member's.", + "operationId": "reinstate_org_personal_access_token_api_v1_orgs_current_personal_access_tokens__pat_id__revocation_delete", + "security": [ + { + "API Key": [] + }, + { + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "pat_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Pat Id" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "404": { + "description": "The personal access token does not exist, or belongs to another member and the caller may not administer other members' tokens.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true } }, "/api/v1/orgs/current/set-default-sso-provision": { @@ -20739,7 +21897,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/login": { @@ -20760,7 +21919,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sso/email-verification/send": { @@ -20809,7 +21969,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/sso/email-verification/status": { @@ -20851,7 +22012,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sso/email-verification/confirm": { @@ -20895,7 +22057,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sso/settings/{sso_login_slug}": { @@ -20942,7 +22105,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/sso/email-lookup": { @@ -20988,7 +22152,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/api-key": { @@ -21025,14 +22190,15 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ "api-key" ], "summary": "Generate Api Key", - "description": "Generate an api key for the user", + "description": "Generate an api key for the user.", "operationId": "generate_api_key_api_v1_api_key_post", "requestBody": { "content": { @@ -21058,6 +22224,16 @@ } } }, + "403": { + "description": "Insufficient permission or the organization blocks API keys from creating other API keys.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, "422": { "description": "Validation Error", "content": { @@ -21079,7 +22255,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/api-key/{api_key_id}": { @@ -21134,7 +22311,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/api-key/current": { @@ -21172,7 +22350,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -21226,7 +22405,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/api-key/current/{pat_id}": { @@ -21282,7 +22462,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/tenants": { @@ -21345,7 +22526,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -21390,7 +22572,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/me/onboarding_state": { @@ -21417,7 +22600,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -21442,7 +22626,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/me/onboarding_state/{field}": { @@ -21451,7 +22636,7 @@ "me" ], "summary": "Update Onboarding State Field", - "description": "Update a specific onboarding completion field for the current user.\n\nValid fields:\n- tracing_completed_at\n- lgstudio_completed_at\n- playground_completed_at\n- evaluation_completed_at\n- success_viewed_at", + "description": "Update a specific onboarding completion field for the current user.\n\nValid fields:\n- tracing_completed_at\n- lgstudio_completed_at\n- playground_completed_at\n- evaluation_completed_at\n- success_viewed_at\n- agent_platform_welcome_viewed_at", "operationId": "update_onboarding_state_field_api_v1_me_onboarding_state__field__put", "security": [ { @@ -21490,7 +22675,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/me/ls_user_id": { @@ -21518,7 +22704,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/service-accounts": { @@ -21555,7 +22742,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -21606,7 +22794,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/service-accounts/{service_account_id}": { @@ -21661,7 +22850,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/pending": { @@ -21692,7 +22882,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/workspaces/pending/{id}": { @@ -21738,7 +22929,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/pending/{workspace_id}/claim": { @@ -21785,7 +22977,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/members": { @@ -21817,7 +23010,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "post": { "tags": [ @@ -21868,7 +23062,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/workspaces/current/members/active": { @@ -22038,7 +23233,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/members/pending": { @@ -22163,7 +23359,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/members/batch": { @@ -22195,7 +23392,7 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/PendingIdentity" + "$ref": "#/components/schemas/WorkspaceInviteResult" }, "type": "array", "title": "Response Add Members To Current Workspace Batch Api V1 Workspaces Current Members Batch Post" @@ -22227,7 +23424,8 @@ { "Organization ID": [] } - ] + ], + "x-public": true } }, "/api/v1/workspaces/current/members/{identity_id}": { @@ -22279,7 +23477,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -22339,10 +23538,75 @@ } } } - } + }, + "x-public": true } }, "/api/v1/workspaces/current/members/{identity_id}/pending": { + "patch": { + "tags": [ + "workspaces" + ], + "summary": "Patch Current Workspace Pending Member", + "description": "Update the role on a pending workspace member invite.", + "operationId": "patch_current_workspace_pending_member_api_v1_workspaces_current_members__identity_id__pending_patch", + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "parameters": [ + { + "name": "identity_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Identity Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PendingIdentityPatch" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PendingIdentity" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "x-public": true + }, "delete": { "tags": [ "workspaces" @@ -22391,7 +23655,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/usage-limits": { @@ -22428,7 +23693,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true }, "put": { "tags": [ @@ -22479,7 +23745,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/usage-limits/org": { @@ -22516,7 +23783,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/usage-limits/{usage_limit_id}": { @@ -22569,7 +23837,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/settings": { @@ -22602,7 +23871,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/settings/handle": { @@ -22655,7 +23925,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/repos": { @@ -22688,6 +23959,16 @@ "title": "With Latest Manifest" } }, + { + "name": "include_owners", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Owners" + } + }, { "name": "limit", "in": "query", @@ -23017,7 +24298,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -23068,7 +24350,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -23123,7 +24406,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}": { @@ -23186,7 +24470,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -23257,7 +24542,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -23316,7 +24602,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/fork": { @@ -23389,7 +24676,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/tags": { @@ -23697,7 +24985,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/optimize-job": { @@ -23750,7 +25039,8 @@ { "Bearer Auth": [] } - ] + ], + "x-public": true } }, "/api/v1/likes/{owner}/{repo}": { @@ -23823,7 +25113,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/comments/{owner}/{repo}": { @@ -23893,7 +25184,8 @@ } } } - } + }, + "x-public": true }, "get": { "tags": [ @@ -23976,7 +25268,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/comments/{owner}/{repo}/{parent_comment_id}": { @@ -24071,7 +25364,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -24151,7 +25445,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/comments/{owner}/{repo}/{parent_comment_id}/like": { @@ -24225,7 +25520,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -24297,7 +25593,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/tags": { @@ -24354,7 +25651,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -24425,7 +25723,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/tags/{tag_name}": { @@ -24487,7 +25786,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -24567,7 +25867,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -24635,7 +25936,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/owners": { @@ -24698,7 +26000,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -24769,7 +26072,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -24838,7 +26142,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/optimization-jobs": { @@ -24896,7 +26201,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -24958,7 +26264,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/optimization-jobs/{job_id}": { @@ -25013,7 +26320,8 @@ } } } - } + }, + "x-public": true }, "patch": { "tags": [ @@ -25076,7 +26384,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -25127,7 +26436,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/optimization-jobs/{job_id}/logs": { @@ -25186,7 +26496,8 @@ } } } - } + }, + "x-public": true }, "post": { "tags": [ @@ -25249,7 +26560,8 @@ } } } - } + }, + "x-public": true } }, "/api/v1/repos/{owner}/{repo}/optimization-jobs/{job_id}/logs/{log_id}": { @@ -25304,7 +26616,8 @@ } } } - } + }, + "x-public": true }, "delete": { "tags": [ @@ -25355,22 +26668,12 @@ } } } - } + }, + "x-public": true } }, "/.well-known/oauth-authorization-server": { "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], "description": "Returns OAuth2 authorization server metadata per RFC 8414, including supported endpoints, grant types, and response types.", "tags": [ "oauth" @@ -25398,11 +26701,6 @@ } } }, - "parameters": [] - } - }, - "/api/v1/hub/environments": { - "get": { "security": [ { "API Key": [] @@ -25414,18 +26712,109 @@ "Bearer Auth": [] } ], - "description": "Returns the hub environments model for the current tenant.\nReturns 404 if no custom configuration exists.", + "x-public": true, + "parameters": [] + } + }, + "/.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": [ - "hub_environments" + "oauth" ], - "summary": "List hub environments", + "summary": "Get OpenID Connect provider configuration", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.HubEnvironmentsModel" + "$ref": "#/components/schemas/oauth.OIDCProviderMetadata" + } + } + } + } + }, + "x-public": true, + "parameters": [] + } + }, + "/api/v1/commits/{owner}/{repo}": { + "get": { + "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": [ + "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": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "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" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/commits.ListCommitsResponse" } } } @@ -25435,7 +26824,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25445,7 +26834,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25455,15 +26844,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } } }, - "parameters": [] - }, - "post": { "security": [ { "API Key": [] @@ -25475,19 +26861,41 @@ "Bearer Auth": [] } ], - "description": "Creates the hub environments configuration for the current tenant.", + "x-public": true + }, + "post": { + "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" } } } @@ -25497,17 +26905,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" } } } @@ -25517,51 +26935,107 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.CreateEnvironmentsRequest" + "$ref": "#/components/schemas/commits.CreateCommitReq" } } } } } }, - "/api/v1/hub/environments/{id}": { - "delete": { - "security": [ + "/api/v1/commits/{owner}/{repo}/{commit}": { + "get": { + "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": [ + "commits" + ], + "summary": "Get a commit", + "parameters": [ { - "API Key": [] + "description": "Repository owner (tenant handle) or '-' for private repos", + "name": "owner", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, { - "Tenant ID": [] + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, { - "Bearer Auth": [] - } - ], - "description": "Deletes the hub environments configuration. Tenant reverts to defaults.", - "tags": [ - "hub_environments" - ], - "summary": "Delete hub environments model", - "parameters": [ - { - "description": "Model ID", - "name": "id", + "description": "Commit hash, tag, or 'latest'", + "name": "commit", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "name": "get_examples", + "in": "query", + "schema": { + "type": "boolean", + "default": false, + "title": "Get Examples" + } + }, + { + "description": "Comma-separated list of optional fields: \"model\", \"is_draft\"", + "name": "include", + "in": "query", + "schema": { + "type": "string", + "title": "Include" + } + }, + { + "description": "Deprecated: use Include instead", + "name": "include_model", + "in": "query", + "schema": { + "type": "boolean", + "default": false, + "title": "Include Model" + } + }, + { + "name": "is_view", + "in": "query", + "schema": { + "type": "boolean", + "default": false, + "title": "Is View" + } } ], "responses": { @@ -25570,10 +27044,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/commits.CommitResponse" } } } @@ -25583,7 +27054,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25593,7 +27064,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } @@ -25603,14 +27074,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/hub_environments.ErrorResponse" + "$ref": "#/components/schemas/commits.ErrorResponse" } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] @@ -25622,22 +27091,16 @@ "Bearer Auth": [] } ], - "description": "Replaces the environments array on an existing model.", + "x-public": true + } + }, + "/api/v1/hub/environments": { + "get": { + "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", @@ -25680,20 +27143,6 @@ } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/hub_environments.UpdateEnvironmentsRequest" - } - } - } - } - } - }, - "/auth/public": { - "get": { "security": [ { "API Key": [] @@ -25705,28 +27154,58 @@ "Bearer Auth": [] } ], - "description": "Returns public authentication information for the current workspace-level session.", + "x-public": true, + "parameters": [] + }, + "post": { + "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" } } } } }, - "parameters": [] - } - }, - "/auth/sandbox-access": { - "get": { "security": [ { "API Key": [] @@ -25738,30 +27217,34 @@ "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/hub_environments.CreateEnvironmentsRequest" + } + } + } + } + } + }, + "/api/v1/hub/environments/{id}": { + "delete": { + "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" } } ], @@ -25771,7 +27254,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authn.PublicAuthInfo" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -25781,72 +27267,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" } } } + } + }, + "security": [ + { + "API Key": [] }, - "404": { - "description": "Not Found", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true + }, + "patch": { + "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" } } } - } - } - } - }, - "/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" } } } @@ -25856,35 +27359,55 @@ "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/hub_environments.ErrorResponse" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "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": { + "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": [ + "info" + ], + "summary": "Get server info", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/info.InfoGetResponse" + } + } + } + } + }, "security": [ { "API Key": [] @@ -25896,117 +27419,90 @@ "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).", + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/alerts/{session_id}": { + "post": { + "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": "List commits", + "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": { "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" - } } ], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Alert rule created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ListCommitsResponse" + "$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" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" + } + } + } + }, + "429": { + "description": "Alert Rule Limit Reached", + "content": { + "application/json": { + "schema": { + "$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" } } } } - } - }, - "post": { + }, "security": [ { "API Key": [] @@ -26018,15 +27514,30 @@ "Bearer Auth": [] } ], - "description": "Creates a new commit in a repository.\nRequires authentication and write access to the repository.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.CreateAlertRuleRequest" + } + } + } + } + } + }, + "/api/v1/platform/alerts/{session_id}/test": { + "post": { + "description": "Tests an alert action which will fire a notification to all configured recipients if the configuration is valid.", "tags": [ - "commits" + "alert_rules" ], - "summary": "Create 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", + "description": "Session ID", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -26034,8 +27545,8 @@ } }, { - "description": "Repository handle", - "name": "repo", + "description": "Alert rule ID", + "name": "alert_rule_id", "in": "path", "required": true, "schema": { @@ -26044,22 +27555,37 @@ } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "Alert action fired successfully", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.CreateCommitResponse" + "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" } } } @@ -26069,46 +27595,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.ErrorResponse" + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/commits.CreateCommitReq" - } - } - } - } - } - }, - "/commits/{owner}/{repo}/{commit}": { - "get": { "security": [ { "API Key": [] @@ -26120,24 +27632,20 @@ "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", + "x-public": true + } + }, + "/api/v1/platform/alerts/{session_id}/{alert_rule_id}": { + "get": { + "description": "Gets an alert rule.", "tags": [ - "commits" + "alert_rules" ], - "summary": "Get a commit", + "summary": "Get 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": { @@ -26145,98 +27653,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": { - "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": { "200": { - "description": "OK", + "description": "Alert rule", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/commits.CommitResponse" + "$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" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } }, "404": { - "description": "Not Found", + "description": "Not found", "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" } } } } - } - } - }, - "/datasets/{dataset_id}/experiment-view-overrides": { - "get": { + }, "security": [ { "API Key": [] @@ -26248,93 +27735,111 @@ "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", + "x-public": true + }, + "delete": { + "description": "Deletes an alert rule", "tags": [ - "experiment-view-overrides" + "alert_rules" ], - "summary": "Get experiment view override configurations 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": { "200": { - "description": "Successfully retrieved experiment view override configurations", + "description": "Alert rule deleted", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + "type": "object", + "additionalProperties": { + "allOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "message": { + "type": "string" + } + } + } + ] } } } } }, "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" + } + } + } + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.ErrorResponse" } } } } - } - }, - "post": { + }, "security": [ { "API Key": [] @@ -26346,128 +27851,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).", + "x-public": true + }, + "patch": { + "description": "Updates an alert rule.", "tags": [ - "experiment-view-overrides" + "alert_rules" ], - "summary": "Create new experiment view override configuration for a dataset", + "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" + } + }, + { + "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 updated", "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" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePostRequest" - } - } - } - } - } - }, - "/datasets/{dataset_id}/experiment-view-overrides/{id}": { - "get": { "security": [ { "API Key": [] @@ -26479,101 +27967,89 @@ "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alerts.UpdateAlertRuleRequest" + } + } + } + } + } + }, + "/api/v1/platform/annotation-queues/items/{queue_item_id}/status": { + "post": { + "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": "Get experiment view override configuration by specific ID", + "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 retrieved experiment view override configuration", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + "$ref": "#/components/schemas/annotationqueues.CreateAnnotationQueueItemStatusResponse" } } } }, "400": { - "description": "Invalid ID format\" 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" } } } }, - "500": { - "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - }, - "delete": { + }, "security": [ { "API Key": [] @@ -26585,94 +28061,160 @@ "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/annotationqueues.CreateAnnotationQueueItemStatusRequest" + } + } + } + } + } + }, + "/api/v1/platform/annotation-queues/{queue_id}/items": { + "get": { + "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. Optional min_start_time/max_start_time bound the item's trace start time; items with no start time are excluded when either bound is set. 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": [ - "experiment-view-overrides" + "annotation_queues" ], - "summary": "Delete experiment view override configuration", + "summary": "List annotation queue items", "parameters": [ { - "example": "\"550e8400-e29b-41d4-a716-446655440000\"", - "description": "Dataset ID", - "name": "dataset_id", + "description": "Annotation queue ID", + "name": "queue_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", - "in": "path", + "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", - "format": "uuid" + "title": "Status" + } + }, + { + "description": "Page size (max 100)", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "default": 20, + "title": "Page Size" + } + }, + { + "description": "Opaque pagination cursor", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + }, + { + "description": "Filter to RUN or THREAD", + "name": "item_type", + "in": "query", + "schema": { + "enum": [ + "RUN", + "THREAD" + ], + "type": "string", + "title": "Item Type" + } + }, + { + "description": "Only items whose trace start time is at or after this timestamp. Omit or send the zero time for no bound", + "name": "min_start_time", + "in": "query", + "schema": { + "type": "string", + "format": "date-time", + "title": "Min Start Time" + } + }, + { + "description": "Only items whose trace start time is at or before this timestamp. Omit or send the zero time for no bound", + "name": "max_start_time", + "in": "query", + "schema": { + "type": "string", + "format": "date-time", + "title": "Max Start Time" + } + }, + { + "description": "Pagination direction. backward requires cursor", + "name": "direction", + "in": "query", + "schema": { + "enum": [ + "forward", + "backward" + ], + "type": "string", + "default": "forward", + "title": "Direction" } } ], "responses": { - "204": { - "description": "Successfully deleted experiment view override (no content returned)" - }, - "400": { - "description": "Invalid ID format\" example({\"error\":\"invalid experiment view override ID format\"})", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/annotationqueues.ListAnnotationQueueItemsResponse" } } } }, - "401": { - "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", + "400": { + "description": "Bad Request", "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\"})", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error\" example({\"error\":\"internal server error\"})", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] @@ -26684,159 +28226,173 @@ "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.", + "x-public": true + }, + "post": { + "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": [ - "experiment-view-overrides" + "annotation_queues" ], - "summary": "Update existing experiment view override configuration", + "summary": "Add annotation queue items", "parameters": [ { - "example": "\"550e8400-e29b-41d4-a716-446655440000\"", - "description": "Dataset ID", - "name": "dataset_id", + "description": "Annotation queue ID", + "name": "queue_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", - "in": "path", - "required": true, + "description": "Extend trace retention for added run items", + "name": "extend_trace_retention", + "in": "query", "schema": { - "type": "string", - "format": "uuid" + "type": "boolean", + "title": "Extend Trace Retention" } } ], "responses": { - "200": { - "description": "Successfully updated experiment view override", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + "$ref": "#/components/schemas/annotationqueues.AddAnnotationQueueItemsResponse" } } } }, "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" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePatchRequest" + "$ref": "#/components/schemas/annotationqueues.AddAnnotationQueueItemsRequest" } } } } } }, - "/issues-agent/lcu-spend": { + "/api/v1/platform/annotation-queues/{queue_id}/items/count": { "get": { - "security": [ + "description": "Returns the number of annotation queue items in one status bucket. The two time windows are independent: start_time/end_time bound when an item was archived, min_start_time/max_start_time bound when its trace ran. Items with no trace start time are excluded when either of the latter is set.", + "tags": [ + "annotation_queues" + ], + "summary": "Get the annotation queue item count", + "parameters": [ { - "API Key": [] + "description": "Queue ID", + "name": "queue_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, { - "Tenant ID": [] + "description": "Count bucket: all, needs_my_review, needs_others_review, or archived.", + "name": "status", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Status" + } }, { - "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.", - "tags": [ - "issues-agent" - ], - "summary": "Get issues-agent (Engine) LCU spend per project for the calling org", - "parameters": [ + "description": "Archived strictly after this time. Only used when status=archived", + "name": "start_time", + "in": "query", + "schema": { + "type": "string", + "title": "Start Time" + } + }, + { + "description": "Archived strictly before this time. Only used when status=archived", + "name": "end_time", + "in": "query", + "schema": { + "type": "string", + "title": "End Time" + } + }, { - "description": "Inclusive window start, RFC 3339. Defaults to first instant of current calendar month (UTC).", - "name": "start", + "description": "Trace started at or after this time", + "name": "min_start_time", "in": "query", "schema": { "type": "string", - "title": "Start" + "format": "date-time", + "title": "Min Start Time" } }, { - "description": "Exclusive window end, RFC 3339. Defaults to first instant of next calendar month (UTC).", - "name": "end", + "description": "Trace started at or before this time", + "name": "max_start_time", "in": "query", "schema": { "type": "string", - "title": "End" + "format": "date-time", + "title": "Max Start Time" } } ], @@ -26846,7 +28402,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendResponse" + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemCountResponse" } } } @@ -26856,7 +28412,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -26866,7 +28425,36 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -26876,16 +28464,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } - } - } - }, - "/me/providers/{providerType}": { - "get": { + }, "security": [ { "API Key": [] @@ -26897,15 +28484,20 @@ "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.", + "x-public": true + } + }, + "/api/v1/platform/annotation-queues/{queue_id}/items/delete": { + "post": { + "description": "Remove RUN or THREAD items from a single annotation queue by item ID. Both active and completed items can be removed.", "tags": [ - "me" + "annotation_queues" ], - "summary": "Get the authenticated user's provider user ID", + "summary": "Delete 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": { @@ -26919,7 +28511,10 @@ "content": { "application/json": { "schema": { - "type": "string" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -26929,36 +28524,42 @@ "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" } } } } - } - } - }, - "/oauth/authorize": { - "get": { + }, "security": [ { "API Key": [] @@ -26970,118 +28571,53 @@ "Bearer Auth": [] } ], - "description": "Validates authorization request parameters and redirects to the frontend consent page per RFC 6749.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/annotationqueues.DeleteAnnotationQueueItemsRequest" + } + } + } + } + } + }, + "/api/v1/platform/annotation-queues/{queue_id}/items/{item_id}": { + "patch": { + "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": "Initiate OAuth2 authorization", + "summary": "Update an annotation queue item", "parameters": [ { - "description": "Must be 'code'", - "name": "response_type", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Response Type" - } - }, - { - "description": "OAuth2 client ID", - "name": "client_id", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Client Id" - } - }, - { - "description": "Redirect URI registered with the client", - "name": "redirect_uri", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Redirect Uri" - } - }, - { - "description": "PKCE code challenge", - "name": "code_challenge", - "in": "query", + "description": "Annotation queue ID", + "name": "queue_id", + "in": "path", "required": true, "schema": { - "type": "string", - "title": "Code Challenge" + "type": "string" } }, { - "description": "PKCE method, must be 'S256'", - "name": "code_challenge_method", - "in": "query", + "description": "Annotation queue item ID", + "name": "item_id", + "in": "path", "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/oauth.TokenErrorResponse" - } - } + "type": "string" } } - } - } - }, - "/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", + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItem" } } } @@ -27091,102 +28627,86 @@ "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" } } } }, - "500": { - "description": "Internal Server Error", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "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" - }, - "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" - ] + "$ref": "#/components/schemas/annotationqueues.PatchAnnotationQueueItemRequest" } } } } } }, - "/oauth/client/{clientID}": { + "/api/v1/platform/annotation-queues/{queue_id}/items/{item_id}/placement": { "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.", + "description": "Resolve a RUN or THREAD item to its current review section and zero-based position for deep linking. The returned cursor counts RUN and THREAD items together, so it is only valid for a list request with no item_type or start-time filter.", "tags": [ - "oauth" + "annotation_queues" ], - "summary": "Get public OAuth2 client metadata", + "summary": "Get annotation queue item placement", "parameters": [ { - "description": "OAuth2 client ID", - "name": "clientID", + "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": { @@ -27200,7 +28720,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.ClientPublicMetadata" + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemPlacementResponse" } } } @@ -27210,7 +28730,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" } } } @@ -27220,16 +28750,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - } - }, - "/oauth/device/authorize": { - "post": { + }, "security": [ { "API Key": [] @@ -27241,22 +28767,34 @@ "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.", + "x-public": true + } + }, + "/api/v1/platform/annotation-queues/{queue_id}/reviewers": { + "post": { + "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": "Authorize a device code", - "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/annotationqueues.AddReviewerResponse" } } } @@ -27266,98 +28804,118 @@ "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", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "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.AddReviewerRequest" } } } } } }, - "/oauth/device/code": { - "post": { - "security": [ - { - "API Key": [] - }, + "/api/v1/platform/annotation-queues/{queue_id}/reviewers/{identity_id}": { + "delete": { + "description": "Unassigns an identity as a reviewer for the queue. Idempotent.", + "tags": [ + "annotation_queues" + ], + "summary": "Remove a reviewer from an annotation queue", + "parameters": [ { - "Tenant ID": [] + "description": "Queue ID", + "name": "queue_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, { - "Bearer Auth": [] + "description": "Identity ID of the reviewer to remove", + "name": "identity_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } ], - "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", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.DeviceCodeResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -27367,35 +28925,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "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": [] @@ -27407,19 +28945,24 @@ "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.", + "x-public": true + } + }, + "/api/v1/platform/datasets/examples/delete": { + "post": { + "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": "Register an OAuth2 dynamic client", + "summary": "Hard Delete Examples", "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.ClientRegistrationResponse" + "$ref": "#/components/schemas/examples.ExamplesDeletedResponse" } } } @@ -27429,46 +28972,42 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "413": { - "description": "Request Entity Too Large", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenErrorResponse" + "$ref": "#/components/schemas/examples.ErrorResponse" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/oauth.ClientRegistrationRequest" + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/examples.ErrorResponse" + } } } } - } - } - }, - "/oauth/revoke": { - "post": { + }, "security": [ { "API Key": [] @@ -27480,64 +29019,45 @@ "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": { + "application/json": { "schema": { - "type": "object", - "properties": { - "token": { - "type": "string", - "description": "Token to revoke (access token or refresh token)" - } - }, - "required": [ - "token" - ] + "$ref": "#/components/schemas/examples.DeleteExamplesRequest" } } } } } }, - "/oauth/token": { + "/api/v1/platform/datasets/{dataset_id}/examples": { "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, + "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": [ + "examples" + ], + "summary": "Upload Examples", + "parameters": [ { - "Bearer Auth": [] + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "description": "Token endpoint that dispatches by grant_type: authorization_code, urn:ietf:params:oauth:grant-type:device_code, or refresh_token.", - "tags": [ - "oauth" - ], - "summary": "Exchange grant for OAuth2 tokens", - "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/oauth.TokenResponse" + "$ref": "#/components/schemas/examples.ExamplesCreatedResponse" } } } @@ -27547,22 +29067,54 @@ "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" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/examples.ErrorResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/examples.ErrorResponse" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { @@ -27570,300 +29122,354 @@ "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": { + "{example_id}": { "type": "string", - "description": "PKCE code verifier (authorization_code grant)" + "format": "binary", + "description": "The Example info as JSON. Can have fields 'metadata', 'split', 'use_source_run_io', 'source_run_id', 'created_at', 'modified_at'" }, - "redirect_uri": { + "{example_id}.inputs": { "type": "string", - "description": "Redirect URI (authorization_code grant)" + "format": "binary", + "description": "The Example inputs as JSON" }, - "device_code": { + "{example_id}.outputs": { "type": "string", - "description": "Device code (device_code grant)" + "format": "binary", + "description": "THe Example outputs as JSON" }, - "refresh_token": { + "{example_id}.attachments.{name}": { "type": "string", - "description": "Refresh token (refresh_token grant)" + "format": "binary", + "description": "File attachment named {name}" } }, "required": [ - "grant_type", - "client_id" + "{example_id}", + "{example_id}.inputs" ] } } } } - } - }, - "/orgs/current/data-planes": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] - }, + }, + "patch": { + "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": [ + "examples" + ], + "summary": "Update Examples", + "parameters": [ { - "Bearer Auth": [] + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } } ], - "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": [ - "data_planes" - ], - "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.ExamplesUpdatedResponse" } } } }, "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", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" } } } }, - "500": { - "description": "Internal server error", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/examples.ErrorResponse" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/examples.ErrorResponse" } } } } }, - "parameters": [] - }, - "post": { "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "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}" + ] + } + } + } + } + } + }, + "/api/v1/platform/datasets/{dataset_id}/examples/{example_id}": { + "delete": { + "description": "Soft-delete an example, preserving prior versions and their attachments. If the latest version is already deleted, the request succeeds without creating another version. Deletion is recorded at the current time or just after the latest version, whichever is later. For future-dated versions, latest reads reflect deletion immediately; timestamp reads reflect deletion only at or after the recorded deletion timestamp.", "tags": [ - "data_planes" + "examples" ], - "summary": "Create a new data plane", - "parameters": [], - "responses": { - "202": { - "description": "Data plane requested", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/data_planes.PublicDataPlane" - } - } + "summary": "Delete an example", + "parameters": [ + { + "description": "Dataset ID", + "name": "dataset_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } }, - "400": { - "description": "Invalid input", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } + { + "description": "Example ID", + "name": "example_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" } + } + ], + "responses": { + "204": { + "description": "Example deleted or already deleted" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Invalid dataset or example ID", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "BYOC not enabled or insufficient permissions", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "409": { - "description": "Name already exists for this organization", + "description": "Not authorized to update this dataset", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "Example not found in this dataset", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/data_planes.CreateDataPlaneRequestAws" - } - } - } - } - } - }, - "/repos/{owner}/{repo}/tags/{tag_name}/history": { - "get": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "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.", + "x-public": true + } + }, + "/api/v1/platform/evaluators": { + "get": { + "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": "Filter to evaluators attached to the agent's environments or tagged datasets; run_rules then lists only those attachments", + "name": "agent_id", + "in": "query", + "schema": { + "type": "string", + "title": "Agent 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": { - "default": 50, "type": "integer", - "maximum": 100, - "minimum": 1, + "default": 100, "title": "Limit" } }, { + "description": "Offset for pagination", "name": "offset", "in": "query", "schema": { - "default": 0, "type": "integer", - "minimum": 0, + "default": 0, "title": "Offset" } } @@ -27874,7 +29480,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.TagTransitionHistoryResponse" + "$ref": "#/components/schemas/evaluators.ListEvaluatorsResponse" } } } @@ -27884,17 +29490,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" } } } @@ -27904,16 +29520,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tag_transitions.ErrorResponse" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } - } - } - }, - "/runs": { - "post": { + }, "security": [ { "API Key": [] @@ -27925,34 +29537,22 @@ "Bearer Auth": [] } ], - "description": "Queues a single run for ingestion. The request body must be a JSON-encoded run object that follows the Run schema.", + "x-public": true + }, + "post": { + "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" } } } @@ -27962,105 +29562,104 @@ "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" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/runs.Run" + "$ref": "#/components/schemas/evaluators.CreateEvaluatorRequest" } } } } - } - }, - "/runs/batch": { - "post": { - "security": [ - { - "API Key": [] - }, + }, + "delete": { + "description": "Delete multiple evaluators by their IDs. Returns per-item success/failure.", + "tags": [ + "evaluators" + ], + "summary": "Bulk delete evaluators", + "parameters": [ { - "Tenant ID": [] + "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" + } }, { - "Bearer Auth": [] + "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" + } } ], - "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": [ - "runs" - ], - "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" } } } @@ -28070,90 +29669,42 @@ "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" + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } }, - "413": { - "description": "Request Entity Too Large", + "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" } } } } }, - "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" - } - } - } - } - } - } - } - } - }, - "/runs/multipart": { - "post": { "security": [ { "API Key": [] @@ -28165,22 +29716,126 @@ "Bearer Auth": [] } ], - "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.", + "x-public": true + } + }, + "/api/v1/platform/evaluators/spend": { + "get": { + "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, feedback_key, tag_value_id, and agent_id may be supplied with group_by to narrow listing aggregations.", "tags": [ - "runs" + "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" + } + }, + { + "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": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Resource Id" + } + }, + { + "description": "Filter grouped results by evaluator type: 'llm' or 'code'. Only valid with group_by.", + "name": "type", + "in": "query", + "schema": { + "type": "string", + "title": "Type" + } + }, + { + "description": "Filter grouped results by evaluator feedback key. Only valid with group_by.", + "name": "feedback_key", + "in": "query", + "schema": { + "type": "string", + "title": "Feedback Key" + } + }, + { + "description": "Filter grouped results to evaluators, projects, or datasets tagged with all supplied tag value IDs. Only valid with group_by.", + "name": "tag_value_id", + "in": "query", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Tag Value Id" + } + }, + { + "description": "Filter grouped results to spend from evaluator attachments on the agent's environments or tagged datasets. Only valid with group_by.", + "name": "agent_id", + "in": "query", + "schema": { + "type": "string", + "title": "Agent Id" + } + }, + { + "description": "Start of the 7-day window (YYYY-MM-DD).", + "name": "period_start", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Period Start" + } + } ], - "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" } } } @@ -28190,108 +29845,52 @@ "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" } } } } }, - "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}" - } - } - } - } - } - } - } - }, - "/runs/{run_id}": { - "patch": { "security": [ { "API Key": [] @@ -28303,45 +29902,34 @@ "Bearer Auth": [] } ], - "description": "Updates a run identified by its ID. The body should contain only the fields to be changed; unknown fields are ignored.", + "x-public": true + } + }, + "/api/v1/platform/evaluators/{evaluator_id}": { + "get": { + "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" } } } @@ -28351,76 +29939,52 @@ "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" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/runs.Run" - } - } - } - } - } - }, - "/v1/agent-builder/integrations": { - "get": { "security": [ { "API Key": [] @@ -28432,31 +29996,54 @@ "Bearer Auth": [] } ], - "description": "Returns default policy, integration overrides, and known integrations for the current workspace.", + "x-public": true + }, + "delete": { + "description": "Delete an evaluator. Returns 409 when a code evaluator build is ENQUEUED or BUILDING, or when run rules still reference the evaluator and delete_run_rules is false. When delete_run_rules is true, all run rules referencing this evaluator are deleted first (same tenant) if the build is not in flight. 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" } } } @@ -28466,10 +30053,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } @@ -28479,10 +30063,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" } } } @@ -28492,18 +30083,12 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } }, - "parameters": [] - }, - "put": { "security": [ { "API Key": [] @@ -28515,19 +30100,32 @@ "Bearer Auth": [] } ], - "description": "Replaces default policy and integration overrides for the current workspace.", + "x-public": true + }, + "patch": { + "description": "Update an existing evaluator's name, LLM configuration, or code configuration. Returns 409 when a code evaluator build is ENQUEUED or BUILDING.", "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" } } } @@ -28537,10 +30135,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" } } } @@ -28550,10 +30165,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" } } } @@ -28563,29 +30185,12 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/evaluators.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsUpdatePayload" - } - } - } - } - } - }, - "/v1/beacon/usage-snapshot": { - "post": { "security": [ { "API Key": [] @@ -28597,24 +30202,35 @@ "Bearer Auth": [] } ], - "description": "Records aggregate entity counts (workspaces, projects, datasets, active users, etc.)\nfrom a self-hosted deployment or BYOC data plane.\nSelf-hosted authenticates via license_key in the body.\nBYOC data planes authenticate via the X-Data-Plane-Auth JWT header.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/evaluators.UpdateEvaluatorRequest" + } + } + } + } + } + }, + "/api/v1/platform/features": { + "get": { + "description": "Returns a consolidated view of default models and disabled models per feature for the workspace.", "tags": [ - "beacon" + "features" ], - "summary": "Submit a usage snapshot", - "parameters": [], + "summary": "List feature configurations", "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" + "type": "array", + "items": { + "$ref": "#/components/schemas/features.FeatureConfig" } } } @@ -28625,10 +30241,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28638,10 +30251,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28651,30 +30261,12 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/beacon.SubmitUsageSnapshotPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/deepagents/auth-sessions": { - "post": { "security": [ { "API Key": [] @@ -28686,79 +30278,73 @@ "Bearer Auth": [] } ], - "description": "Initiates an OAuth flow for the caller. If the user is already authorized, returns a completed session that references an existing token. Otherwise, returns a pending session containing a verification URL the user must visit to complete authorization.", + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/features/{feature}/default-model": { + "put": { + "description": "Sets or replaces the default model for a feature in the workspace.", "tags": [ - "fleet auth" + "features" ], - "summary": "Start an authorization session", - "parameters": [], - "responses": { - "200": { - "description": "Existing token reused; no new session created.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.CreateSessionResponse" - } - } + "summary": "Set default model for a feature", + "parameters": [ + { + "description": "Feature name", + "name": "feature", + "in": "path", + "required": true, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, - "201": { - "description": "New pending session created; visit verification_url to complete.", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.CreateSessionResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.CreateSessionRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/deepagents/auth-sessions/{session_id}": { - "get": { "security": [ { "API Key": [] @@ -28770,88 +30356,70 @@ "Bearer Auth": [] } ], - "description": "Returns the current status of an in-flight authorization session. The optional `wait_seconds` query param (1-25, default 1) keeps the request open up to that many seconds, returning early if the session completes. Poll until status is COMPLETED.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features.UpsertDefaultModelRequest" + } + } + } + } + }, + "delete": { + "description": "Removes the default model for a feature in the workspace.", "tags": [ - "fleet auth" + "features" ], - "summary": "Get an authorization session", + "summary": "Delete default model for a feature", "parameters": [ { - "description": "Authorization session ID", - "name": "session_id", + "description": "Feature name", + "name": "feature", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "Long-poll window in seconds (1-25, default 1)", - "name": "wait_seconds", - "in": "query", - "schema": { - "type": "integer", - "title": "Wait Seconds" - } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.GetSessionResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.errorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/deepagents/mcp-servers": { - "get": { "security": [ { "API Key": [] @@ -28863,41 +30431,37 @@ "Bearer Auth": [] } ], - "description": "Returns MCP servers visible to the caller after ABAC filtering. Service-key callers may pass X-Ls-User-Id to resolve per-user OAuth providers.", + "x-public": true + } + }, + "/api/v1/platform/features/{feature}/disabled-models": { + "put": { + "description": "Adds a model to the disabled list for a feature in the workspace.", "tags": [ - "fleet mcp" + "features" ], - "summary": "List MCP servers", + "summary": "Disable a model for a feature", "parameters": [ { - "description": "User UUID for per-user OAuth resolution (service keys)", - "name": "X-Ls-User-Id", - "in": "header", + "description": "Feature name", + "name": "feature", + "in": "path", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28907,7 +30471,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28917,7 +30481,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28927,25 +30491,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] @@ -28957,29 +30508,56 @@ "Bearer Auth": [] } ], - "description": "Registers a new MCP server configuration for the workspace.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/features.DisableModelRequest" + } + } + } + } + } + }, + "/api/v1/platform/features/{feature}/disabled-models/{model}": { + "delete": { + "description": "Removes a model from the disabled list for a feature in the workspace.", "tags": [ - "fleet mcp" + "features" ], - "summary": "Create MCP server", - "parameters": [], - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } - } + "summary": "Re-enable a disabled model for a feature", + "parameters": [ + { + "description": "Feature name", + "name": "feature", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Model name (URL-encoded)", + "name": "model", + "in": "path", + "required": true, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28989,7 +30567,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -28999,17 +30577,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "409": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } @@ -29019,37 +30587,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/features.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.CreateMcpServerPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/deepagents/mcp-servers/{mcp_server_id}": { - "get": { "security": [ { "API Key": [] @@ -29061,19 +30604,42 @@ "Bearer Auth": [] } ], - "description": "Returns a single MCP server by ID.", + "x-public": true + } + }, + "/api/v1/platform/gateway-policies": { + "get": { + "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`, `model_fallback`, `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 mcp" + "gateway-policies" ], - "summary": "Get MCP server", + "summary": "List gateway policies", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", - "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" } } ], @@ -29083,17 +30649,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + } } } } @@ -29103,27 +30662,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "404": { - "description": "Not Found", + "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29133,164 +30682,162 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Deletes an MCP server configuration.", + "x-public": true + }, + "post": { + "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`, `model_fallback`, `rate_limit`, or `default_rate_limit`.\nThe shape of `config` depends on policy_type:\n- `spend_cap` / `default_spend_cap`, one limit:\n`{\"window\": \"hourly\"|\"daily\"|\"weekly\"|\"monthly\", \"limit_usd\": }`\n- `spend_cap` / `default_spend_cap`, a limit per window:\n`{\"version\": 2, \"limits\": [{\"window\": \"hourly\"|\"daily\"|\"weekly\"|\"monthly\", \"limit_usd\": }]}`\n- `guard`:\n`{\"version\": 1, \"detect\": {\"pii\": , \"secrets\": , \"custom\": [{\"pattern\": \"\"}]}, \"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`detect.custom` (optional) holds at most one Go regexp (RE2 syntax) of up to 512 bytes; matching text is redacted. Avoid capture groups: if present, only the first group is redacted, wherever that text appears.\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- `model_fallback`:\n`{\"strategy\": \"priority_fallback\", \"triggers\": {\"status_codes\": [429, 502, 503, 504]}, \"chain\": {\"selector\": {\"type\": \"provider_model\", \"provider\": \"openai\", \"model\": \"gpt-4o\"}, \"candidates\": [{\"type\": \"provider_model\", \"provider\": \"openai\", \"model\": \"gpt-4o-mini\"}, {\"type\": \"model_config\", \"model_config_id\": \"\"}]}}`\n`chain.candidates` is an ordered list of 1–5 direct provider models or saved workspace model configurations. A non-empty `workspace_id` matcher is required. `provider_model` selectors are workspace-only; `alias` selectors may be narrowed by `user_id` or `api_key_id`. Provider/model selectors are unique within a workspace, while alias names are reserved across the organization and may intentionally shadow a model name.\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. Built-in\nkeys are `organization_id`, `workspace_id`, `user_id`, `api_key_id`,\nand `run_rule_id`. Values under the same key are ORed; distinct keys\nare ANDed. A default policy uses an empty built-in matcher value so\nthe runtime materializes a child for each subject it sees. A\n`default_spend_cap` and `default_rate_limit` may add one empty custom\nmetadata key to bucket each subject by the corresponding\n`X-Gateway-*` request header; the materialized child stores both values.\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` and `model_fallback` do not upsert\nby matchers — name must be unique per organization (409 on\nconflict). Returns 201 either way.", "tags": [ - "fleet mcp" - ], - "summary": "Delete MCP server", - "parameters": [ - { - "description": "MCP server ID", - "name": "mcp_server_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "gateway-policies" ], + "summary": "Create a gateway policy", + "parameters": [], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "missing or invalid auth", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "LLM Gateway not enabled for the organization, or caller lacks organization:gateway:manage", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "409": { + "description": "policy name conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Partially updates an MCP server. Tool list cache is invalidated on success.", - "tags": [ - "fleet mcp" - ], - "summary": "Update MCP server", - "parameters": [ + "x-codeSamples": [ { - "description": "MCP server ID", - "name": "mcp_server_id", - "in": "path", - "required": true, - "schema": { - "type": "string" + "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": "spend_cap (per-window limits)", + "lang": "json", + "source": "{\n \"name\": \"daily-and-monthly-cap\",\n \"policy_type\": \"spend_cap\",\n \"action\": \"block\",\n \"subject_matchers\": [{\"key\":\"organization_id\",\"value\":\"\"}],\n \"config\": {\"version\": 2, \"limits\": [{\"window\": \"daily\", \"limit_usd\": 25}, {\"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, \"custom\": [{\"pattern\": \"BLD-[A-Z]{3}-[0-9]{4}\"}]}, \"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" + } } } + } + } + }, + "/api/v1/platform/gateway-policies/search": { + "post": { + "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": [ + "gateway-policies" ], + "summary": "Search gateway policies by subject value set", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + } } } } }, "400": { - "description": "Bad Request", + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29300,27 +30847,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "404": { - "description": "Not Found", + "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29330,61 +30867,49 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.UpdateMcpServerPayload" + "$ref": "#/components/schemas/gateway_policies.SearchGatewayPoliciesRequest" } } } - }, - "x-hidden": true + } } }, - "/v1/deepagents/mcp-servers/{mcp_server_id}/oauth-provider": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Discovers and registers an OAuth provider for the authenticated user against a Deep Agents MCP server configured with per-user dynamic client mode. Idempotent when a mapping already exists.", + "/api/v1/platform/gateway-policies/{id}": { + "get": { + "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": [ - "fleet mcp" + "gateway-policies" ], - "summary": "Register per-user MCP OAuth provider", + "summary": "Get a gateway policy", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", + "description": "Policy ID", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -29394,17 +30919,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderResponse" + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" } } } }, "400": { - "description": "Bad Request", + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29414,27 +30939,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$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/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "404": { - "description": "Not Found", + "description": "policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29444,109 +30969,50 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/deepagents/mcp/tools": { - "get": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Returns tools from a remote MCP server. Serves cached results when fresh, otherwise fetches from the remote server and caches the response.", + "x-public": true + }, + "delete": { + "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": [ - "fleet mcp" + "gateway-policies" ], - "summary": "List MCP tools", + "summary": "Delete a gateway policy", "parameters": [ { - "description": "MCP server URL to fetch tools from", - "name": "url", - "in": "query", + "description": "Policy ID", + "name": "id", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Url" - } - }, - { - "description": "OAuth provider ID for token-based auth", - "name": "oauth_provider_id", - "in": "query", - "schema": { - "type": "string", - "title": "Oauth Provider Id" - } - }, - { - "description": "Skip cache and fetch fresh tools", - "name": "force_refresh", - "in": "query", - "schema": { - "type": "boolean", - "title": "Force Refresh" - } - }, - { - "description": "User ID override (service-key callers)", - "name": "ls_user_id", - "in": "query", - "schema": { - "type": "string", - "title": "Ls User Id" + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcptools.ListToolsResponse" - } - } - } + "204": { + "description": "No Content" }, "400": { - "description": "Bad Request", + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29556,132 +31022,67 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "LLM Gateway not enabled, or caller lacks organization:gateway:manage", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "404": { - "description": "Not Found", + "description": "policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/agents": { - "get": { "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Returns the agents the authenticated user has access to. The\ndefault `audience=user` view returns the agents the caller owns\nplus any agents that have been directly shared with the caller\nvia `permissions.shared_users`. The alternate `audience=tenant`\nview returns only the workspace-shared agents (those whose\n`permissions.visibility` is `tenant`). System-created defaults\nare always excluded.\n\nEach item carries two caller-relative fields that describe the\nauthenticated user's relationship to that agent:\n* `is_owner` — `true` if the caller is the agent's owner.\n* `access_level` — one of `READ`, `RUN`, or `WRITE`. Owners\nget `WRITE`. Direct shares get the level matching the\n`shared_users` list they appear in. Tenant-shared rows get\nthe agent's `tenant_access_level`. The maximum applicable\nlevel always wins.\n\nResults are cursor-paginated. Pass the `cursor` value from the\nprevious response to fetch the next page; `next_cursor` is\nomitted when no further pages exist.", + "x-public": true + }, + "patch": { + "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": [ - "agents" + "gateway-policies" ], - "summary": "List agents", + "summary": "Update a gateway policy", "parameters": [ { - "description": "Items per page (1-100). Default 20.", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor returned by the previous list call.", - "name": "cursor", - "in": "query", - "schema": { - "type": "string", - "title": "Cursor" - } - }, - { - "description": "Case-insensitive substring filter on the agent name.", - "name": "name", - "in": "query", - "schema": { - "type": "string", - "title": "Name" - } - }, - { - "description": "Scope of agents to return. `user` (default) returns owned + directly-shared. `tenant` returns workspace-shared only.", - "name": "audience", - "in": "query", - "schema": { - "default": "user", - "type": "string", - "enum": [ - "user", - "tenant" - ], - "title": "Audience" - } - }, - { - "description": "Field to sort by.", - "name": "sort_by", - "in": "query", - "schema": { - "default": "updated_at", - "type": "string", - "enum": [ - "created_at", - "updated_at", - "name" - ], - "title": "Sort By" - } - }, - { - "description": "Sort direction.", - "name": "sort_order", - "in": "query", + "description": "Policy ID", + "name": "id", + "in": "path", + "required": true, "schema": { - "default": "desc", "type": "string", - "enum": [ - "asc", - "desc" - ], - "title": "Sort Order" + "format": "uuid" } } ], @@ -29691,17 +31092,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ListAgentsResponse" + "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" } } } }, "400": { - "description": "Bad Request", + "description": "validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } @@ -29711,89 +31112,138 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "LLM Gateway not enabled, or caller lacks organization:gateway:manage", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "409": { + "description": "matcher edit collides with another policy in the same family", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/gateway_policies.errorResponse" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Bearer Auth": [] + } + ], + "x-codeSamples": [ + { + "label": "spend_cap", + "lang": "json", + "source": "{\n \"config\": {\"window\": \"monthly\", \"limit_usd\": 200},\n \"enabled\": false\n}" }, { - "Bearer Auth": [] + "label": "spend_cap (per-window limits)", + "lang": "json", + "source": "{\n \"config\": {\"version\": 2, \"limits\": [{\"window\": \"daily\", \"limit_usd\": 50}, {\"window\": \"monthly\", \"limit_usd\": 200}]}\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}" } ], - "description": "Creates an agent with the given metadata, runtime configuration,\nand optional file tree. Returns the agent's identity, ownership,\nand a revision token identifying the initial file tree.\nCreation is atomic — either the agent is fully created or no\nstate is persisted.\n\nThe agent is a file tree. Typed fields are ergonomic shortcuts\nthat the server renders into specific paths:\n* `system_prompt` → `AGENTS.md`\n* `tools` → `tools.json`\n* `subagents[i]` → `subagents//AGENTS.md` (system prompt +\ngenerated frontmatter) + `subagents//tools.json`\n\nAdd skills through the `files` map: write `skills//SKILL.md`\n(plus any supporting files) for an inline skill, or a `files` entry\nwith `type: \"skill\"` and a `repo_handle` to link a shared workspace\nskill. (A typed `skills[]` field exists but is deprecated.)\n\nAll file paths in the top-level `files` map must be relative —\nno leading `/`, no `..` segments.\n\nBeyond the file tree, typed blocks configure the agent itself:\n* `model` — **required** — the model to run, referenced by its catalog\n`id` from `GET /v1/fleet/models`. A built-in (default) model uses a\n`provider:model` id, e.g. `{\"id\": \"anthropic:claude-sonnet-4-6\"}`.\nA custom (workspace) model uses the workspace model id, e.g.\n`{\"id\": \"beeb2ec7-3311-423b-89a3-9c95a59593af\"}`. The server\nresolves the id against the catalog; an unknown id returns 422.\n* `display` — presentation metadata (`icon`, `icon_color`).\n* `backend` — execution backend: `state` (no computer, files\nlive in LangGraph state) or `sandbox` (an isolated computer).\nFor `sandbox`, the nested `sandbox_config` sets the `scope`\n(`thread` = one sandbox per thread, `agent` = one shared\nacross threads — required) plus optional `sandbox_id`, `snapshot_id`,\n`policy_ids`, and TTLs. `sandbox_config` is only valid when `type` is\n`sandbox`. When `backend` (or `backend.type`) is omitted it\ndefaults to the `state` backend, which is thread-scoped:\nfiles live in LangGraph thread state and persist across turns\nwithin a thread but are not shared across threads.\n* `options` — behavioural flags such as `trace_inputs_outputs`.\n\n`tools.interrupt_config` maps a tool name to its human-in-the-loop\nrule. Each value is either a boolean (`true` = require approval\nbefore the tool runs, `false` = run automatically) or an object\n`{ \"allowed_decisions\": [...], \"description\": \"...\", \"args_schema\": {...} }`\nwhere `allowed_decisions` is a subset of `approve`, `edit`,\n`reject`, `respond`. `{}` means no interrupts.\n\nUse `files` for paths the typed fields don't cover. Setting both\na typed field and the `files` entry that resolves to the same path\nreturns 422.\n\nExample request body:\n```json\n{\n\"name\": \"researcher\",\n\"description\": \"Researches topics and summarises findings.\",\n\"permissions\": {\"identity\": \"personal\", \"visibility\": \"tenant\", \"tenant_access_level\": \"read\"},\n\"model\": {\"id\": \"anthropic:claude-sonnet-4-6\"},\n\"display\": {\"icon\": \"Rocket02\", \"icon_color\": \"blue\"},\n\"backend\": {\"type\": \"sandbox\", \"sandbox_config\": {\"scope\": \"thread\", \"snapshot_id\": \"550e8400-e29b-41d4-a716-446655440000\"}},\n\"options\": {\"trace_inputs_outputs\": true, \"triggers_paused\": false, \"skip_memory_write_protection\": false, \"tools_url\": \"https://tools.example.com/mcp\", \"slack_oauth_provider_id\": \"prov_123\"},\n\"system_prompt\": \"You are a helpful research agent.\",\n\"tools\": {\n\"tools\": [\n{\"name\": \"read_url_content\", \"mcp_server_url\": \"https://tools.example.com\"}\n],\n\"interrupt_config\": {\"read_url_content\": true}\n},\n\"subagents\": [\n{\"name\": \"summarizer\", \"description\": \"Summarises text\", \"system_prompt\": \"You summarise text.\"}\n],\n\"files\": {\n\"skills/summarize/SKILL.md\": {\"type\": \"file\", \"content\": \"# Summarize\\n\\nGive a one-paragraph summary.\"},\n\"skills/shared-helper\": {\"type\": \"skill\", \"repo_handle\": \"shared-helper\"}\n}\n}\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": { + "description": "Resolves the flattened file tree for an agent or skill repository at a specific commit, tag, or latest.", "tags": [ - "agents" + "directories" ], - "summary": "Create an agent", + "summary": "Get directory contents", "parameters": [ { - "description": "Echo the agent's file tree in the response", - "name": "include_files", + "description": "Repository owner handle or '-' for current tenant", + "name": "owner", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Commit hash/tag to resolve (defaults to latest)", + "name": "commit", "in": "query", "schema": { - "type": "boolean", - "title": "Include Files" + "type": "string", + "title": "Commit" } } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.Agent" + "$ref": "#/components/schemas/directory.GetDirectoryResponse" } } } @@ -29803,37 +31253,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } }, - "409": { - "description": "Conflict", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } @@ -29843,47 +31293,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" - } - } - } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.CreateAgentRequest" - } - } } }, - "x-hidden": true - } - }, - "/v1/fleet/agents/{agent_id}": { - "get": { "security": [ { "API Key": [] @@ -29895,49 +31310,57 @@ "Bearer Auth": [] } ], - "description": "Returns the specified agent: its metadata (name, description,\npermissions, runtime, extras) plus the parsed\nfile tree (system prompt, tools, subagents, skills) at the\nlatest commit. Pass `include_files=true` to also receive the\nraw file map.\n\nResponses include `system_prompt` and `instructions` with the\nsame value; `instructions` is deprecated.", + "x-public": true + }, + "delete": { + "description": "Deletes an agent or skill repository and its owned child file repositories.", "tags": [ - "agents" + "directories" ], - "summary": "Get an agent", + "summary": "Delete directory repository", "parameters": [ { - "description": "Agent ID", - "name": "agent_id", + "description": "Repository owner handle or '-' for current tenant", + "name": "owner", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "description": "Include the raw file map in the response", - "name": "include_files", + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Repository type to delete; a different type is treated as not found", + "name": "repo_type", "in": "query", "schema": { - "type": "boolean", - "title": "Include Files" + "enum": [ + "agent", + "skill" + ], + "type": "string", + "title": "Repo Type" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.Agent" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } @@ -29947,7 +31370,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } @@ -29957,7 +31380,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } @@ -29967,7 +31390,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } @@ -29977,35 +31400,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] @@ -30017,33 +31417,53 @@ "Bearer Auth": [] } ], - "description": "Deletes the agent and all of its associated state. The call is\nidempotent — deleting a non-existent agent returns 204.", + "x-public": true + } + }, + "/api/v1/platform/hub/repos/{owner}/{repo}/directories/commits": { + "post": { + "description": "Creates a new directory commit for an agent or skill repository by applying file/link create, update, and delete operations. Linked directories default to the LATEST selector; use COMMIT to pin one commit. The legacy commit_id write field is deprecated and resolves as LATEST.", "tags": [ - "agents" + "directories" ], - "summary": "Delete an agent", + "summary": "Create directory commit", "parameters": [ { - "description": "Agent ID", - "name": "agent_id", + "description": "Repository owner handle or '-' for current tenant", + "name": "owner", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" + } + }, + { + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/directory.CommitResponse" + } + } + } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } @@ -30053,7 +31473,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } @@ -30063,45 +31483,42 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/directory.errorResponse" } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] @@ -30113,39 +31530,207 @@ "Bearer Auth": [] } ], - "description": "Updates the specified agent. All request fields are optional;\nomitted fields are left unchanged.\n\nMerge semantics follow PATCH conventions:\n* Top-level scalars (`name`, `description`) merge field-by-field —\nsending one does not affect the other.\n* Nested objects (`runtime`, `backend`, `permissions`, `display`,\n`options`, `tools`, `subagents`, `skills`, `extras`) are replaced\nin full when any of their fields is provided. To preserve\nexisting nested values, include them in your PATCH.\n* Providing any of `system_prompt`, `tools`, `subagents`, `skills`,\nor `files` triggers a new file tree commit.\n\nEntries under `files` are created or replaced by path. The call is\natomic per request: if any entry fails validation, no changes are\napplied.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/directory.CreateDirectoryCommitRequest" + } + } + } + } + } + }, + "/api/v1/platform/issues": { + "get": { + "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, linked trace, or last modified time.", "tags": [ - "agents" + "issues" ], - "summary": "Update an agent", + "summary": "[Beta] List issues", "parameters": [ { - "description": "Agent ID", - "name": "agent_id", - "in": "path", - "required": true, + "description": "Filter by session ID (UUID)", + "name": "session_id", + "in": "query", "schema": { "type": "string", - "format": "uuid" + "title": "Session Id" } }, { - "description": "Echo the agent's file tree in the response", - "name": "include_files", - "in": "query", + "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": { + "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 exact severity (repeatable; OR semantics)", + "name": "severity_exact", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "enum": [ + 0, + 1, + 2, + 3 + ], + "type": "integer" + }, + "title": "Severity Exact" + } + }, + { + "description": "Filter by Engine activity (repeatable; OR semantics)", + "name": "activity", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "enum": [ + "fixing", + "watching", + "recurred" + ], + "type": "string" + }, + "title": "Activity" + } + }, + { + "description": "Filter by tag (exact match)", + "name": "tag", + "in": "query", + "schema": { + "type": "string", + "title": "Tag" + } + }, + { + "description": "Return only issues with a linked run in this trace", + "name": "trace_id", + "in": "query", + "schema": { + "type": "string", + "format": "uuid", + "title": "Trace Id" + } + }, + { + "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": [ + "default", + "created_at", + "updated_at", + "last_seen", + "last_updated", + "trace_count", + "severity" + ], + "type": "string", + "title": "Sort By" + } + }, + { + "description": "Group results by issue lifecycle status before applying sort_by", + "name": "status_first", + "in": "query", "schema": { "type": "boolean", - "title": "Include Files" + "title": "Status First" + } + }, + { + "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; at most 100000)", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" } } ], "responses": { "200": { "description": "OK", + "headers": { + "X-Pagination-Total": { + "description": "Total number of matching issues", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.Agent" + "type": "array", + "items": { + "$ref": "#/components/schemas/issues.Issue" + } } } } @@ -30155,7 +31740,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/issues.ErrorResponse" } } } @@ -30165,57 +31760,98 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } + } + }, + "security": [ + { + "API Key": [] }, - "422": { - "description": "Unprocessable Entity", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true + } + }, + "/api/v1/platform/issues-agent": { + "get": { + "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": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/agent.IssuesAgent" + } } } } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.UpdateAgentRequest" + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.ErrorResponse" + } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/agents/{agent_id}/clone": { - "post": { "security": [ { "API Key": [] @@ -30227,39 +31863,44 @@ "Bearer Auth": [] } ], - "description": "Creates a new agent that mirrors the source agent's behaviour\nbut is owned by the calling identity. Creation is atomic — the\nclone is either fully created or no state is persisted.\n\nWhat is copied from the source:\n* `description`\n* `runtime` (model configuration)\n* `backend` (backend type + sandbox configuration)\n* `system_prompt`, `tools`, `subagents`, `skills`\n* any leftover files outside the typed fields above (e.g.\n`docs/README.md` attached via the escape `files` field)\n\nWhat the caller can override (sent in the request body):\n* `name` — defaults to `\" (Copy)\"`\n* `permissions` — defaults to the source's `identity` with\n`visibility=user` and `tenant_access_level=read`. When\nsupplied the object fully replaces the default; PATCH-style\nmerging does not apply.\n\nWhat is always reset for the clone (you cannot override these):\n* agent ID, agent version, owner, timestamps\n* stamped user context (`user_email`, `user_name`,\n`user_timezone` — taken from the calling identity + the\n`X-User-Timezone` header)\n\nWhat is never copied (start fresh on the clone):\n* `extras` (caller-defined metadata bag, e.g. icon\ncustomisations, template IDs)\n* caller-defined `configurable` bag entries\n* sharing state, tokens, triggers, and schedules\n\nCloning a built-in system template returns 422.", + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/issues/{id}": { + "get": { + "description": "**Beta:** This endpoint is in active development and may change without notice.\n\nReturns one issue for the authenticated tenant.", "tags": [ - "agents" + "issues" ], - "summary": "Clone an agent", + "summary": "[Beta] Get issue", "parameters": [ { - "description": "Source agent ID", - "name": "agent_id", + "description": "Issue ID (UUID)", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } }, { - "description": "Echo the new agent's file tree in the response", - "name": "include_files", + "description": "Include current Linear workflow state and validated linked GitHub pull request URLs", + "name": "include_linear_context", "in": "query", "schema": { "type": "boolean", - "title": "Include Files" + "title": "Include Linear Context" } } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.Agent" + "$ref": "#/components/schemas/issues.Issue" } } } @@ -30269,7 +31910,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } @@ -30279,7 +31920,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } @@ -30289,7 +31930,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } @@ -30299,67 +31940,162 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } + } + }, + "security": [ + { + "API Key": [] }, - "500": { - "description": "Internal Server Error", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true + } + }, + "/api/v1/platform/issues/{id}/views": { + "post": { + "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/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } }, - "503": { - "description": "Service Unavailable", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } - } - }, - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.CloneAgentRequest" + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/issues.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/issues.ErrorResponse" + } } } } }, - "x-hidden": true + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true } }, - "/v1/fleet/agents/{agent_id}/connections": { + "/api/v1/platform/mcp-vendors": { "get": { + "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" + } + } + } + } + }, "security": [ { "API Key": [] @@ -30371,15 +32107,21 @@ "Bearer Auth": [] } ], - "description": "Lists the OAuth connections for an agent.", + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}": { + "get": { + "description": "Returns vendor metadata and current settings.", "tags": [ - "agents" + "mcp_vendors" ], - "summary": "List an agent's connections", + "summary": "Get MCP vendor", "parameters": [ { - "description": "Agent ID", - "name": "agent_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { @@ -30393,7 +32135,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ListConnectionsResponse" + "$ref": "#/components/schemas/mcp_vendors.GetMcpVendorResponse" } } } @@ -30403,35 +32145,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] @@ -30443,15 +32182,20 @@ "Bearer Auth": [] } ], - "description": "Associates an existing auth token with an agent so the agent can act with that token.", + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/account": { + "get": { + "description": "Resolves OAuth token and returns the vendor's account info.", "tags": [ - "agents" + "mcp_vendors" ], - "summary": "Create a connection for an agent", + "summary": "Get vendor account", "parameters": [ { - "description": "Agent ID", - "name": "agent_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { @@ -30460,12 +32204,12 @@ } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.Connection" + "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountResponseList" } } } @@ -30475,7 +32219,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30485,27 +32229,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30515,27 +32259,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/agents.CreateConnectionRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/agents/{agent_id}/connections/{connection_id}": { - "delete": { "security": [ { "API Key": [] @@ -30547,15 +32276,20 @@ "Bearer Auth": [] } ], - "description": "Removes a single connection from an agent. The underlying token is not revoked.", + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/mcp-servers": { + "get": { + "description": "Returns the MCP gateways from the vendor for the workspace's configured org/project.", "tags": [ - "agents" + "mcp_vendors" ], - "summary": "Remove an agent's connection", + "summary": "List MCP servers for a vendor", "parameters": [ { - "description": "Agent ID", - "name": "agent_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { @@ -30563,25 +32297,61 @@ } }, { - "description": "Connection Id", - "name": "connection_id", - "in": "path", - "required": true, + "description": "Max items to return (default 100)", + "name": "limit", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Number of items to skip (default 0)", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.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/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30591,7 +32361,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30601,17 +32371,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/agents/{agent_id}/health": { - "get": { "security": [ { "API Key": [] @@ -30623,20 +32388,24 @@ "Bearer Auth": [] } ], - "description": "Returns a per-MCP-server health summary for the agent. Each MCP\nserver referenced by the agent (its tools.json plus every\nsubagent's tools.json) is probed in parallel by issuing a single\nMCP initialize JSON-RPC call. Credentials are resolved per\n(tenant, server) using the configured authentication method.\nPer-server failures surface as\n`ok=false` with an `error_code` (auth_failed | unreachable |\ninvalid_response) and a human-readable `error` string.\n`mcp_check.ok` is `true` only when every server returns a\nhealthy response; an empty server list is treated as healthy.", + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/settings": { + "get": { + "description": "Returns the current vendor-specific settings.", "tags": [ - "agents" + "mcp_vendors" ], - "summary": "Check agent MCP-server health", + "summary": "Get vendor settings", "parameters": [ { - "description": "Agent ID", - "name": "agent_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -30646,7 +32415,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.HealthResponse" + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" } } } @@ -30656,37 +32425,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agents.ErrorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/auth-providers": { - "get": { "security": [ { "API Key": [] @@ -30698,97 +32462,77 @@ "Bearer Auth": [] } ], - "description": "Lists the OAuth providers configured for your organization. Each provider defines how a third-party service (GitHub, Google, Slack, etc.) authorizes connections.", + "x-public": true + }, + "put": { + "description": "Replaces vendor settings.", "tags": [ - "fleet auth" + "mcp_vendors" ], - "summary": "List OAuth providers", - "responses": { - "200": { - "description": "OK" - }, - "401": { - "description": "Unauthorized", + "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/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" } } } }, - "502": { - "description": "Bad Gateway", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } - } - }, - "parameters": [], - "x-hidden": true - }, - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Registers an OAuth provider configuration for your organization. End users can then start authorization sessions against this provider.", - "tags": [ - "fleet auth" - ], - "summary": "Register an OAuth provider", - "responses": { - "201": { - "description": "Created" }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "parameters": [], - "x-hidden": true - } - }, - "/v1/fleet/auth-providers/discover": { - "post": { "security": [ { "API Key": [] @@ -30800,21 +32544,52 @@ "Bearer Auth": [] } ], - "description": "Auto-discovers an OAuth provider's metadata from an MCP server URL and registers it for your organization in one step.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + } + } + } + } + }, + "post": { + "description": "Initializes vendor settings.", "tags": [ - "fleet auth" + "mcp_vendors" + ], + "summary": "Create vendor settings", + "parameters": [ + { + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Discover and register an OAuth provider", "responses": { "201": { - "description": "Created" + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + } + } + } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } @@ -30824,28 +32599,42 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "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/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "parameters": [], - "x-hidden": true - } - }, - "/v1/fleet/auth-providers/{provider_id}": { - "get": { "security": [ { "API Key": [] @@ -30857,15 +32646,28 @@ "Bearer Auth": [] } ], - "description": "Returns a single OAuth provider by ID.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" + } + } + } + } + }, + "delete": { + "description": "Removes vendor settings.", "tags": [ - "fleet auth" + "mcp_vendors" ], - "summary": "Get an OAuth provider", + "summary": "Delete vendor settings", "parameters": [ { - "description": "Provider ID", - "name": "provider_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { @@ -30875,42 +32677,46 @@ ], "responses": { "200": { - "description": "OK" + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + } + } + } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] @@ -30922,60 +32728,87 @@ "Bearer Auth": [] } ], - "description": "Deletes an OAuth provider. Tokens previously issued for this provider are revoked.", + "x-public": true + } + }, + "/api/v1/platform/mcp-vendors/{vendor_slug}/tools": { + "get": { + "description": "Returns the tool catalog for this vendor.", "tags": [ - "fleet auth" + "mcp_vendors" ], - "summary": "Delete an OAuth provider", + "summary": "List tools for a vendor", "parameters": [ { - "description": "Provider ID", - "name": "provider_id", + "description": "Vendor slug (e.g. arcade)", + "name": "vendor_slug", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Max tools to return (default 50)", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Number of tools to skip (default 0)", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/mcp_vendors.ListVendorToolsResponse" + } + } + } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] @@ -30987,32 +32820,26 @@ "Bearer Auth": [] } ], - "description": "Updates an OAuth provider's configuration. Sent fields replace the stored values; absent fields are left unchanged.", + "x-public": true + } + }, + "/api/v1/platform/oauth/authorized-apps": { + "get": { + "description": "Lists the third-party applications the authenticated user has authorized to sign in with LangSmith.", "tags": [ - "fleet auth" - ], - "summary": "Update an OAuth provider", - "parameters": [ - { - "description": "Provider ID", - "name": "provider_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "oauth" ], + "summary": "List authorized applications", "responses": { "200": { - "description": "OK" - }, - "400": { - "description": "Bad Request", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth.AuthorizedAppView" + } } } } @@ -31022,37 +32849,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.errorResponse" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/auth-scopes/{scope_slug}/credentials": { - "post": { "security": [ { "API Key": [] @@ -31064,15 +32866,21 @@ "Bearer Auth": [] } ], - "description": "Registers a credential (e.g. a static bearer token) under an auth scope and binds it to one or more targets such as MCP servers. The response never includes the secret token.", + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/oauth/authorized-apps/{clientID}": { + "delete": { + "description": "Revokes the authenticated user's authorization for an application and invalidates that application's active tokens for the user.", "tags": [ - "fleet credentials" + "oauth" ], - "summary": "Create a credential under an auth scope", + "summary": "Revoke an authorized application", "parameters": [ { - "description": "Auth scope slug (currently only \\", - "name": "scope_slug", + "description": "OAuth client ID", + "name": "clientID", "in": "path", "required": true, "schema": { @@ -31081,32 +32889,15 @@ } ], "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/credentials.response" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/credentials.ErrorResponse" - } - } - } + "204": { + "description": "No Content" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/credentials.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -31116,17 +32907,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/credentials.ErrorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/auth-sessions": { - "post": { "security": [ { "API Key": [] @@ -31138,29 +32924,56 @@ "Bearer Auth": [] } ], - "description": "Initiates an OAuth flow for the caller. If the user is already authorized, returns a completed session that references an existing token. Otherwise, returns a pending session containing a verification URL the user must visit to complete authorization.", + "x-public": true + } + }, + "/api/v1/platform/oauth/clients": { + "get": { + "description": "Lists the OAuth clients owned by the caller's organization.", "tags": [ - "fleet auth" + "oauth" ], - "summary": "Start an authorization session", - "parameters": [], + "summary": "List OAuth clients", "responses": { "200": { - "description": "Existing token reused; no new session created.", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.CreateSessionResponse" + "$ref": "#/components/schemas/oauth.OAuthClientListResponse" } } } + } + }, + "security": [ + { + "API Key": [] }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, + "parameters": [] + }, + "post": { + "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": "New pending session created; visit verification_url to complete.", + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.CreateSessionResponse" + "$ref": "#/components/schemas/oauth.OAuthClientCredentialsResponse" } } } @@ -31170,47 +32983,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } }, - "502": { - "description": "Bad Gateway", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.CreateSessionRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/auth-sessions/{session_id}": { - "get": { "security": [ { "API Key": [] @@ -31222,29 +33010,34 @@ "Bearer Auth": [] } ], - "description": "Returns the current status of an in-flight authorization session. The optional `wait_seconds` query param (1-25, default 1) keeps the request open up to that many seconds, returning early if the session completes. Poll until status is COMPLETED.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.CreateOAuthClientRequest" + } + } + } + } + } + }, + "/api/v1/platform/oauth/clients/{id}": { + "get": { "tags": [ - "fleet auth" + "oauth" ], - "summary": "Get an authorization session", + "summary": "Get an OAuth client", "parameters": [ { - "description": "Authorization session ID", - "name": "session_id", + "description": "Client UUID", + "name": "id", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "Long-poll window in seconds (1-25, default 1)", - "name": "wait_seconds", - "in": "query", - "schema": { - "type": "integer", - "title": "Wait Seconds" - } } ], "responses": { @@ -31253,57 +33046,66 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.GetSessionResponse" + "$ref": "#/components/schemas/oauth.OAuthClientView" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } + } + }, + "security": [ + { + "API Key": [] }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.errorResponse" - } - } + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true + }, + "delete": { + "tags": [ + "oauth" + ], + "summary": "Delete an OAuth client", + "parameters": [ + { + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/auth-tokens": { - "get": { "security": [ { "API Key": [] @@ -31315,46 +33117,21 @@ "Bearer Auth": [] } ], - "description": "Lists the active OAuth tokens belonging to the caller. Optionally filter by provider or agent. Accepts page_size and cursor for forward compatibility; pagination is not yet enforced and all matching tokens are returned in one page.", + "x-public": true + }, + "patch": { "tags": [ - "fleet auth" + "oauth" ], - "summary": "List your connection tokens", + "summary": "Update an OAuth client", "parameters": [ { - "description": "Filter by provider ID", - "name": "provider_id", - "in": "query", - "schema": { - "type": "string", - "title": "Provider Id" - } - }, - { - "description": "Filter to default (true) or secondary (false) tokens. Omit to return both.", - "name": "is_default", - "in": "query", - "schema": { - "type": "boolean", - "title": "Is Default" - } - }, - { - "description": "Items per page (1-100, default 20). Currently advisory; all matching tokens are returned.", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor. Currently accepted but ignored.", - "name": "cursor", - "in": "query", + "description": "Client UUID", + "name": "id", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Cursor" + "type": "string" } } ], @@ -31364,7 +33141,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.ListTokensResponse" + "$ref": "#/components/schemas/oauth.OAuthClientView" } } } @@ -31374,37 +33151,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/auth-tokens/{token_id}": { - "delete": { "security": [ { "API Key": [] @@ -31416,15 +33178,30 @@ "Bearer Auth": [] } ], - "description": "Revokes a single connection token by ID. The user is disconnected from the corresponding service.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.UpdateOAuthClientRequest" + } + } + } + } + } + }, + "/api/v1/platform/oauth/clients/{id}/rotate-secret": { + "post": { + "description": "Generates a new client secret for a confidential client, invalidating the previous one. The new secret is shown only once.", "tags": [ - "fleet auth" + "oauth" ], - "summary": "Revoke a connection token", + "summary": "Rotate an OAuth client secret", "parameters": [ { - "description": "Token ID", - "name": "token_id", + "description": "Client UUID", + "name": "id", "in": "path", "required": true, "schema": { @@ -31433,43 +33210,37 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/oauth.OAuthClientCredentialsResponse" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "$ref": "#/components/schemas/errutil.UserError" } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] @@ -31481,206 +33252,195 @@ "Bearer Auth": [] } ], - "description": "Updates a token's metadata such as label or default flag.", + "x-public": true + } + }, + "/api/v1/platform/ops/backfills/restart": { + "post": { + "description": "Deletes the backfill job record, causing the backfill to restart from the beginning on the next cron tick. Requires instance admin access.", "tags": [ - "fleet auth" - ], - "summary": "Update a connection token", - "parameters": [ - { - "description": "Token ID", - "name": "token_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "backfills" ], + "summary": "Restart a backfill job", + "parameters": [], "responses": { "200": { - "description": "OK" + "description": "Backfill restarted", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "Not Found", + "description": "Backfill not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/auth.errorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/integrations": { - "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns integrations available to the workspace.", - "tags": [ - "fleet integrations" - ], - "summary": "List integrations", - "parameters": [ - { - "description": "Filter by source (e.g. langchain, custom)", - "name": "source", - "in": "query", - "schema": { - "type": "string", - "title": "Source" - } - }, - { - "description": "Items per page (default 20, max 100)", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor", - "name": "cursor", - "in": "query", - "schema": { - "type": "string", - "title": "Cursor" + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/backfills.restartBackfillRequest" + } } } + } + } + }, + "/api/v1/platform/orgs/current/access-policies": { + "get": { + "description": "Lists all access policies for the organization.", + "tags": [ + "access_policies" ], + "summary": "List access policies", "responses": { "200": { - "description": "OK", + "description": "List of access policies", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ListResponse" + "$ref": "#/components/schemas/authz_internal.ListAccessPoliciesResponse" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Registers a new custom integration. Type is forced to CUSTOM.", + "x-public": true, + "parameters": [] + }, + "post": { + "description": "Creates a new access policy.", "tags": [ - "fleet integrations" + "access_policies" ], - "summary": "Create a custom integration", + "summary": "Create an access policy", "parameters": [], "responses": { "201": { - "description": "Created", + "description": "Access policy created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.Integration" + "$ref": "#/components/schemas/authz_internal.AccessPolicyCreateResponse" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -31690,118 +33450,87 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/integrations.CreateRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/integrations/{id}": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] }, - { - "Bearer Auth": [] - } - ], - "tags": [ - "fleet integrations" - ], - "summary": "Get an integration", - "parameters": [ - { - "description": "Integration id", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Role or access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.Integration" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Idempotent. Returns 204 whether or not the integration existed.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.CreateAccessPolicyPayload" + } + } + } + } + } + }, + "/api/v1/platform/orgs/current/access-policies/roles/{role_id}/access-policies": { + "post": { + "description": "Attaches one or more access policies to a specific role. The request body must contain an array of access policy IDs.", "tags": [ - "fleet integrations" + "access_policies" ], - "summary": "Delete a custom integration", + "summary": "Attach access policies to a role", "parameters": [ { - "description": "Integration id", - "name": "id", + "description": "Role ID", + "name": "role_id", "in": "path", "required": true, "schema": { @@ -31811,14 +33540,14 @@ ], "responses": { "204": { - "description": "No Content" + "description": "Access policies attached successfully" }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -31828,129 +33557,87 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" - } - } - } - } - }, - "x-hidden": true - }, - "patch": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Updates mutable fields. URL is immutable.", - "tags": [ - "fleet integrations" - ], - "summary": "Update a custom integration", - "parameters": [ - { - "description": "Integration id", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/integrations.Integration" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Role or access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/integrations.UpdateRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/integrations/{id}/auth-methods": { - "put": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Replaces the integration's full list of supported auth methods.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" + } + } + } + } + } + }, + "/api/v1/platform/orgs/current/access-policies/{access_policy_id}": { + "get": { + "description": "Gets a specific access policy by ID.", "tags": [ - "fleet integrations" + "access_policies" ], - "summary": "Replace integration auth methods", + "summary": "Get an access policy", "parameters": [ { - "description": "Integration id", - "name": "id", + "description": "Access Policy ID", + "name": "access_policy_id", "in": "path", "required": true, "schema": { @@ -31960,127 +33647,106 @@ ], "responses": { "200": { - "description": "OK", + "description": "Access policy details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.Integration" + "$ref": "#/components/schemas/authz_internal.AccessPolicy" } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/integrations.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/integrations.ReplaceAuthMethodsRequest" + }, + "503": { + "description": "Service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/mcp-servers": { - "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns MCP servers visible to the caller after ABAC filtering. Service-key callers may pass X-Ls-User-Id to resolve per-user OAuth providers.", + "x-public": true + }, + "delete": { + "description": "Deletes a specific access policy by ID.", "tags": [ - "fleet mcp" + "access_policies" ], - "summary": "List MCP servers", + "summary": "Delete an access policy", "parameters": [ { - "description": "User UUID for per-user OAuth resolution (service keys)", - "name": "X-Ls-User-Id", - "in": "header", + "description": "Access Policy ID", + "name": "access_policy_id", + "in": "path", + "required": true, "schema": { "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } - } - } - } + "204": { + "description": "Access policy deleted successfully" }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "401": { - "description": "Unauthorized", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -32090,183 +33756,185 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "503": { - "description": "Service Unavailable", + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Registers a new MCP server configuration for the workspace.", + "x-public": true + }, + "patch": { + "description": "Updates one or more fields on an access policy.", "tags": [ - "fleet mcp" + "access_policies" + ], + "summary": "Update an access policy", + "parameters": [ + { + "description": "Access Policy ID", + "name": "access_policy_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Create MCP server", - "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "Updated access policy", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" + "$ref": "#/components/schemas/authz_internal.AccessPolicy" } } } }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "Conflict", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "503": { - "description": "Service Unavailable", + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.CreateMcpServerPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/mcp-servers/{mcp_server_id}": { - "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns a single MCP server by ID.", - "tags": [ - "fleet mcp" - ], - "summary": "Get MCP server", - "parameters": [ - { - "description": "MCP server ID", - "name": "mcp_server_id", - "in": "path", - "required": true, - "schema": { - "type": "string" + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.UpdateAccessPolicyPayload" + } } } + } + } + }, + "/api/v1/platform/orgs/current/info": { + "get": { + "description": "Returns organization info for the authenticated user's current organization.", + "tags": [ + "Organizations" ], + "summary": "Get current organization info", "responses": { "200": { - "description": "OK", + "description": "Organization info", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" + "$ref": "#/components/schemas/orgs.OrganizationInfo" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid organization ID", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -32276,170 +33944,257 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Deletes an MCP server configuration.", - "tags": [ - "fleet mcp" + "x-public": true, + "parameters": [] + } + }, + "/api/v1/platform/orgs/current/members": { + "get": { + "description": "Returns a paginated list of org members (active and pending) enriched with workspace memberships.", + "tags": [ + "orgs" ], - "summary": "Delete MCP server", + "summary": "List org members with workspace roles", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", - "in": "path", - "required": true, + "description": "Page size (default 50, max 500)", + "name": "limit", + "in": "query", "schema": { - "type": "string" + "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": "array", + "items": { + "type": "string" + }, + "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, + "schema": { + "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/mcp_servers.McpServerAPIError" + "type": "string" } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { + }, + "X-Members-List-All-Workspaces": { + "description": "true if caller has organization:members:manage", + "schema": { + "type": "string" + } + }, + "X-Pagination-Total": { + "description": "Total number of matching members", "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "string" } } - } - }, - "403": { - "description": "Forbidden", + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "array", + "items": { + "$ref": "#/components/schemas/orgs.OrgMemberEnriched" + } } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Partially updates an MCP server. Tool list cache is invalidated on success.", + "x-public": true + } + }, + "/api/v1/platform/orgs/current/roles/{role_id}/access-policies": { + "post": { + "description": "Attaches one or more access policies to a specific role. The request body must contain an array of access policy IDs.", "tags": [ - "fleet mcp" + "access_policies" ], - "summary": "Update MCP server", + "summary": "Attach access policies to a role", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", + "description": "Role ID", + "name": "role_id", "in": "path", "required": true, "schema": { @@ -32448,268 +34203,221 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } - } - } + "204": { + "description": "Access policies attached successfully" }, "400": { - "description": "Bad Request", + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Role or access policy not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "503": { - "description": "Service Unavailable", + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.UpdateMcpServerPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/mcp-servers/{mcp_server_id}/oauth-provider": { - "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Discovers and registers an OAuth provider for a user against an MCP server configured with per-user dynamic client mode. Idempotent when a mapping already exists.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" + } + } + } + } + }, + "delete": { + "description": "Detaches one or more access policies from a specific role.", "tags": [ - "fleet mcp" + "access_policies" ], - "summary": "Register per-user MCP OAuth provider", + "summary": "Detach access policies from a role", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", + "description": "Role ID", + "name": "role_id", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Access policy IDs to detach", + "name": "access_policy_ids", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Access Policy Ids" + } } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "Access policies detached successfully" + }, + "400": { + "description": "Bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Role not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Semantic validation failed", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "503": { - "description": "Service Unavailable", + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/mcp/tools": { - "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns tools from a remote MCP server. Serves cached results when fresh, otherwise fetches from the remote server and caches the response.", + "x-public": true + } + }, + "/api/v1/platform/orgs/current/scim/tokens": { + "get": { + "description": "List all SCIM bearer tokens for the current organization. The full token values are not returned.", "tags": [ - "fleet mcp" - ], - "summary": "List MCP tools", - "parameters": [ - { - "description": "MCP server URL to fetch tools from", - "name": "url", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Url" - } - }, - { - "description": "OAuth provider ID for token-based auth", - "name": "oauth_provider_id", - "in": "query", - "schema": { - "type": "string", - "title": "Oauth Provider Id" - } - }, - { - "description": "Skip cache and fetch fresh tools", - "name": "force_refresh", - "in": "query", - "schema": { - "type": "boolean", - "title": "Force Refresh" - } - }, - { - "description": "User ID override (service-key callers)", - "name": "ls_user_id", - "in": "query", - "schema": { - "type": "string", - "title": "Ls User Id" - } - } + "SCIM Tokens" ], + "summary": "List SCIM tokens", "responses": { "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcptools.ListToolsResponse" - } - } - } - }, - "400": { - "description": "Bad Request", + "description": "List of SCIM tokens", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/scim.ScimTokenResponse" + } } } } @@ -32719,90 +34427,70 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationRead permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcptools.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/models": { - "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns models available for Fleet agent configuration.", + "x-public": true, + "parameters": [] + }, + "post": { + "description": "Create a new SCIM bearer token for the current organization. The full token value is only returned once upon creation.", "tags": [ - "fleet" - ], - "summary": "List Fleet models", - "parameters": [ - { - "description": "Include the served Fleet default model group.", - "name": "include_served_default", - "in": "query", - "schema": { - "type": "boolean", - "title": "Include Served Default" - } - }, - { - "description": "Include optional OSS model group.", - "name": "include_oss_models", - "in": "query", - "schema": { - "type": "boolean", - "title": "Include Oss Models" - } - } + "SCIM Tokens" ], + "summary": "Create a SCIM token", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created SCIM token with full token value", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/models.ListModelsResponse" + "$ref": "#/components/schemas/scim.ScimTokenSensitiveResponse" } } } @@ -32812,251 +34500,254 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/models.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationAuthenticationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/models.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/models.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/skills": { - "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns the skills in the caller's workspace, paginated.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.CreateScimTokenPayload" + } + } + } + } + } + }, + "/api/v1/platform/orgs/current/scim/tokens/{scim_token_id}": { + "get": { + "description": "Retrieve a specific SCIM token by ID for the current organization. The full token value is not returned.", "tags": [ - "skills" + "SCIM Tokens" ], - "summary": "List skills", + "summary": "Get a SCIM token", "parameters": [ { - "description": "Items per page (default 20, max 100)", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor", - "name": "cursor", - "in": "query", - "schema": { - "type": "string", - "title": "Cursor" - } - }, - { - "description": "Include each skill's file contents (default true). When false, returns a lightweight list: file contents and commit_id are omitted and name falls back to the repo handle. Fetch a skill directly for full metadata.", - "name": "include_files", - "in": "query", + "description": "SCIM Token ID", + "name": "scim_token_id", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "title": "Include Files" + "type": "string" } } ], "responses": { "200": { - "description": "OK", + "description": "SCIM token details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ListSkillsResponse" + "$ref": "#/components/schemas/scim.ScimTokenResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden - requires OrganizationRead permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Creates a workspace skill with the supplied file tree.\nSkills support file entries only — linked agent/skill entries\nare rejected.\n\nCleanup is best-effort: if the initial commit fails the empty\nrepo is deleted, but a transport failure during rollback can\nleave an orphan repo with no commits. Subsequent creates with\nthe same name will then 409; delete the orphan and retry.", + "x-public": true + }, + "delete": { + "description": "Delete a SCIM bearer token from the current organization.", "tags": [ - "skills" + "SCIM Tokens" + ], + "summary": "Delete a SCIM token", + "parameters": [ + { + "description": "SCIM Token ID", + "name": "scim_token_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Create a skill", - "parameters": [], "responses": { - "201": { - "description": "Created", + "204": { + "description": "No content - token deleted successfully" + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.Skill" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationAuthenticationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/skills.CreateSkillRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/skills/{skillID}": { - "get": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns the specified skill, including its full file tree.", + "x-public": true + }, + "patch": { + "description": "Update the description of an existing SCIM token for the current organization.", "tags": [ - "skills" + "SCIM Tokens" ], - "summary": "Get a skill", + "summary": "Update a SCIM token", "parameters": [ { - "description": "Skill ID", - "name": "skillID", + "description": "SCIM Token ID", + "name": "scim_token_id", "in": "path", "required": true, "schema": { @@ -33066,11 +34757,11 @@ ], "responses": { "200": { - "description": "OK", + "description": "Updated SCIM token details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.Skill" + "$ref": "#/components/schemas/scim.ScimTokenResponse" } } } @@ -33080,134 +34771,162 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "Forbidden - requires OrganizationAuthenticationManage permission", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "404": { - "description": "Not Found", + "description": "Token not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.ErrorResponse" + } + } + } + }, + "503": { + "description": "Service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/scim.ErrorResponse" } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Deletes the skill and all of its files. Idempotent: deleting an\nalready-deleted skill returns 204.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/scim.UpdateScimTokenPayload" + } + } + } + } + } + }, + "/api/v1/platform/product-feedbacks": { + "post": { + "description": "**Alpha:** This endpoint is in active development and may change without notice.\n\nSubmits concise product feedback with optional non-sensitive client details.", "tags": [ - "skills" + "productfeedback" ], - "summary": "Delete a skill", + "summary": "[Alpha] Submit product feedback", "parameters": [ { - "description": "Skill ID", - "name": "skillID", - "in": "path", - "required": true, + "description": "Idempotency key", + "name": "Idempotency-Key", + "in": "header", "schema": { "type": "string" } } ], "responses": { - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { + "201": { + "description": "Created", + "headers": { + "Location": { + "description": "URL of the created product feedback", "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "type": "string" } } - } - }, - "403": { - "description": "Forbidden", + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/productfeedback.ProductFeedback" } } } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "malformed or invalid request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Applies a sparse patch to the skill's file tree. Each entry in\n`files` is keyed by relative path: a non-null value upserts\nthat file, an explicit null deletes it, and absent paths are\nleft unchanged. SKILL.md cannot be deleted via this endpoint —\nuse DELETE on the skill instead. Skills support file entries\nonly — linked agent/skill entries are rejected. The commit is\natomic: on validation failure no changes are applied.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/productfeedback.CreateRequest" + } + } + } + } + } + }, + "/api/v1/platform/product-feedbacks/{id}": { + "get": { + "description": "**Alpha:** This endpoint is in active development and may change without notice.", "tags": [ - "skills" + "productfeedback" ], - "summary": "Update a skill", + "summary": "[Alpha] Get product feedback", "parameters": [ { - "description": "Skill ID", - "name": "skillID", + "description": "Product feedback ID", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -33217,77 +34936,84 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.Skill" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "$ref": "#/components/schemas/productfeedback.ProductFeedback" } } } + } + }, + "security": [ + { + "API Key": [], + "Tenant ID": [] }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" - } - } + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "x-public": true + } + }, + "/api/v1/platform/sessions/{sessionID}/agent-versions": { + "get": { + "description": "Returns all agent versions (commit SHAs) seen in the given tracing project, ordered by first_seen_at descending.", + "tags": [ + "sessions" + ], + "summary": "List agent versions for a project", + "parameters": [ + { + "description": "Tracing project (session) UUID", + "name": "sessionID", + "in": "path", + "required": true, + "schema": { + "type": "string" } - }, - "404": { - "description": "Not Found", + } + ], + "responses": { + "200": { + "description": "Agent versions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/tracer_sessions.AgentVersionResponse" + } } } } }, - "422": { - "description": "Unprocessable Entity", + "400": { + "description": "Invalid session ID", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/skills.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/skills.UpdateSkillRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/threads": { - "get": { "security": [ { "API Key": [] @@ -33299,81 +35025,24 @@ "Bearer Auth": [] } ], - "description": "Returns one page of recent non-test threads for a single\nagent, ordered by latest conversation activity. Designed\nfor the Agent Builder thread sidebar; returns a slim summary\nper thread without full LangGraph thread state.\n\nSort order is fixed to recency descending — `state_updated_at`\ndesc nulls last, then `updated_at` desc nulls last, then\n`created_at` desc. By default only non-test threads are\nreturned (`test_run=false`); pass `test_run=true` to list\ntest-run threads instead. Pagination is cursor-based; pass\n`next_cursor` from the previous response to fetch the next page.\n\nWhen `requires_attention=true`, the endpoint fans out to the\nthree buckets that need user action — `interrupted`,\n`error`, and idle threads with `metadata.read_status=false` —\nand merges them into a single recency-ordered page. It\ncannot be combined with `status`.\n\nNote: `is_pinned` is supported as a temporary filter while\npinning lives in metadata; it will be removed once pinning\nbecomes a first-class field.", + "x-public": true + } + }, + "/api/v1/platform/sessions/{session_id}/issues-agent": { + "get": { + "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": [ - "fleet threads" + "issues-agent" ], - "summary": "List threads for an agent", + "summary": "[Beta] Get the issues agent config for a session", "parameters": [ { - "description": "Agent UUID. Required.", - "name": "agent_id", - "in": "query", + "description": "Tracer session ID (UUID)", + "name": "session_id", + "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid", - "title": "Agent Id" - } - }, - { - "description": "Items per page (1-20). Default 20.", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor returned by the previous list call.", - "name": "cursor", - "in": "query", - "schema": { - "type": "string", - "title": "Cursor" - } - }, - { - "description": "Filter to a single thread status.", - "name": "status", - "in": "query", - "schema": { - "type": "string", - "enum": [ - "idle", - "busy", - "interrupted", - "error" - ], - "title": "Status" - } - }, - { - "description": "Filter by pinned state. Temporary; will be removed once pinning is first-class.", - "name": "is_pinned", - "in": "query", - "schema": { - "type": "boolean", - "title": "Is Pinned" - } - }, - { - "description": "Return test-run threads instead of non-test threads. Default false.", - "name": "test_run", - "in": "query", - "schema": { - "type": "boolean", - "title": "Test Run" - } - }, - { - "description": "Return only threads that need user action (interrupted, errored, or unread idle). Cannot be combined with status.", - "name": "requires_attention", - "in": "query", - "schema": { - "type": "boolean", - "title": "Requires Attention" + "type": "string" } } ], @@ -33383,7 +35052,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ListThreadsResponse" + "$ref": "#/components/schemas/agent.IssuesAgent" } } } @@ -33393,7 +35062,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33403,7 +35072,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33413,25 +35082,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] @@ -33443,19 +35119,32 @@ "Bearer Auth": [] } ], - "description": "Create a thread, optionally bound to an agent. Subsequent runs are started on it via `POST /v1/fleet/threads/{thread_id}/runs/stream`.", + "x-public": true + }, + "post": { + "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": [ - "fleet threads" + "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": "Create a thread", - "parameters": [], "responses": { "201": { "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.Thread" + "$ref": "#/components/schemas/agent.IssuesAgent" } } } @@ -33465,7 +35154,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33475,7 +35164,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33485,7 +35174,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33495,37 +35184,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.CreateThreadRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/threads/bulk-modify": { - "post": { "security": [ { "API Key": [] @@ -33537,29 +35211,45 @@ "Bearer Auth": [] } ], - "description": "Applies one thread update payload to multiple threads in a single call. `data` uses the same shape as the single-thread update payload. The request may include at most 50 thread IDs. Returns one result per thread in the same order as `thread_ids`; the overall response is 200 even when individual threads fail.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.CreateIssuesAgentRequest" + } + } + } + } + }, + "delete": { + "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": [ - "fleet threads" + "issues-agent" ], - "summary": "Bulk update threads", - "parameters": [], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.BulkUpdateThreadsResponse" - } - } + "summary": "[Beta] Delete the issues agent for a session", + "parameters": [ + { + "description": "Tracer session ID (UUID)", + "name": "session_id", + "in": "path", + "required": true, + "schema": { + "type": "string" } + } + ], + "responses": { + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33569,7 +35259,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33579,37 +35269,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.BulkUpdateThreadsRequest" + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.ErrorResponse" + } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/threads/count": { - "get": { "security": [ { "API Key": [] @@ -33621,20 +35306,22 @@ "Bearer Auth": [] } ], - "description": "Returns the caller's inbox `attention_count`: the number of threads needing user action — unread idle threads (`metadata.read_status=false`) plus interrupted plus errored. Scoped to deep-agent threads (`graph_id=deep_agent`); test-run threads (`options.test_run=true`) are always excluded.", + "x-public": true + }, + "patch": { + "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": [ - "internal" + "issues-agent" ], - "summary": "Inbox attention count", + "summary": "[Beta] Update the issues agent config for a session", "parameters": [ { - "description": "Optional agent UUID to scope all buckets to a single agent", - "name": "agent_id", - "in": "query", + "description": "Tracer session ID (UUID)", + "name": "session_id", + "in": "path", + "required": true, "schema": { - "type": "string", - "format": "uuid", - "title": "Agent Id" + "type": "string" } } ], @@ -33644,7 +35331,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.CountResponse" + "$ref": "#/components/schemas/agent.IssuesAgent" } } } @@ -33654,7 +35341,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33664,7 +35351,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33674,27 +35361,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/threads/runs": { - "post": { "security": [ { "API Key": [] @@ -33706,29 +35398,44 @@ "Bearer Auth": [] } ], - "description": "Creates a thread bound to `agent_id` and starts a run on it in one call. Returns the upstream run record (pending/running, not yet complete). Run kwargs are passed through; thread-creation flags go in the optional `thread` envelope. The new thread is rolled back if the run fails to start.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/agent.UpdateIssuesAgentRequest" + } + } + } + } + } + }, + "/api/v1/platform/sessions/{session_id}/issues-agent/overview": { + "patch": { + "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": [ - "fleet threads" + "issues-agent" + ], + "summary": "[Beta] Save the agent overview for a session", + "parameters": [ + { + "description": "Tracer session ID (UUID)", + "name": "session_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Create a thread and start a run", - "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "object" - } - } - } - }, - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "type": "object" + "$ref": "#/components/schemas/agent.SaveOverviewResponse" } } } @@ -33738,7 +35445,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33748,7 +35455,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33758,7 +35465,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } @@ -33768,83 +35475,80 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/agent.ErrorResponse" } } } + } + }, + "security": [ + { + "API Key": [] }, - "422": { - "description": "Unprocessable Entity", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" - } - } - } + { + "Tenant ID": [] }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" - } - } - } + { + "Bearer Auth": [] } - }, + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.CreateThreadAndRunRequest" + "$ref": "#/components/schemas/agent.SaveOverviewRequest" } } } - }, - "x-hidden": true + } } }, - "/v1/fleet/threads/search": { + "/api/v1/platform/sessions/{session_id}/issues-agent/webhooks/{id}/roll-secret": { "post": { - "security": [ - { - "API Key": [] - }, + "description": "Replaces the signing secret for the given generic URL issues agent webhook. Slack\nand Jira destinations do not have signing secrets. The new secret is returned once in this\nresponse; future deliveries use it immediately. URL and header values are redacted;\nonly a safe URL display and header names are returned.", + "tags": [ + "issues-agent" + ], + "summary": "Roll an issues agent webhook signing secret", + "parameters": [ { - "Tenant ID": [] + "description": "Tracer session ID (UUID)", + "name": "session_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, { - "Bearer Auth": [] - } - ], - "description": "Searches threads. Request and response bodies are proxied unchanged to the upstream agent runtime.", - "tags": [ - "fleet threads" + "description": "Webhook ID (UUID)", + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Search threads", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object" - } + "$ref": "#/components/schemas/tracer_session_issues_agent_webhooks.IssuesAgentWebhook" } } } @@ -33854,7 +35558,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -33864,7 +35571,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -33874,38 +35584,41 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "422": { - "description": "Unprocessable Entity", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "parameters": [], - "x-hidden": true - } - }, - "/v1/fleet/threads/{thread_id}": { - "get": { "security": [ { "API Key": [] @@ -33917,15 +35630,20 @@ "Bearer Auth": [] } ], - "description": "Returns thread metadata, status, and runtime state for the given thread id.", + "x-public": true + } + }, + "/api/v1/platform/sessions/{session_id}/issues/views": { + "get": { + "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": [ - "fleet threads" + "issues" ], - "summary": "Get thread", + "summary": "[Beta] List viewed issues for a session", "parameters": [ { - "description": "Thread id", - "name": "thread_id", + "description": "Session ID (UUID)", + "name": "session_id", "in": "path", "required": true, "schema": { @@ -33939,55 +35657,52 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ThreadDetail" + "$ref": "#/components/schemas/issues.ListViewsResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/issues.ErrorResponse" } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] @@ -33999,32 +35714,62 @@ "Bearer Auth": [] } ], - "description": "Deletes a thread and all of its runs. Idempotent: deleting a thread that does not exist returns 204.", + "x-public": true + } + }, + "/api/v1/platform/tools": { + "get": { + "description": "Returns a paginated list of tools in the workspace.", "tags": [ - "fleet threads" + "tools" ], - "summary": "Delete thread", + "summary": "List tools", "parameters": [ { - "description": "Thread id", - "name": "thread_id", - "in": "path", - "required": true, + "description": "Maximum number of tools to return", + "name": "limit", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "title": "Limit" + } + }, + { + "description": "Number of tools to skip", + "name": "offset", + "in": "query", + "schema": { + "type": "integer", + "title": "Offset" + } + }, + { + "description": "Search query to filter tools by name or description", + "name": "query", + "in": "query", + "schema": { + "type": "string", + "title": "Query" } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ListToolsResponse" + } + } + } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34034,7 +35779,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34044,25 +35789,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] @@ -34074,29 +35816,22 @@ "Bearer Auth": [] } ], - "description": "Updates thread fields such as title and metadata. Omitted fields are unchanged; null values clear fields where supported.", + "x-public": true + }, + "post": { + "description": "Creates a new tool in the workspace.", "tags": [ - "fleet threads" - ], - "summary": "Update a thread", - "parameters": [ - { - "description": "Thread id", - "name": "thread_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "tools" ], + "summary": "Create a tool", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.UpdateThreadResponse" + "$ref": "#/components/schemas/tools.Tool" } } } @@ -34106,7 +35841,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34116,7 +35851,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34126,57 +35861,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.UpdateThreadRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/threads/{thread_id}/resolve-interrupt": { - "post": { "security": [ { "API Key": [] @@ -34188,15 +35898,30 @@ "Bearer Auth": [] } ], - "description": "Completes a human-interrupt pause on the thread without sending new input, allowing execution to continue or finish. On success the response has no body.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.CreateToolPayload" + } + } + } + } + } + }, + "/api/v1/platform/tools/id/{id}": { + "get": { + "description": "Returns a tool identified by its UUID.", "tags": [ - "fleet threads" + "tools" ], - "summary": "Resolve an interrupted thread", + "summary": "Get a tool by ID", "parameters": [ { - "description": "Thread id", - "name": "thread_id", + "description": "Tool UUID", + "name": "id", "in": "path", "required": true, "schema": { @@ -34205,15 +35930,22 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.Tool" + } + } + } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34223,7 +35955,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34233,7 +35965,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34243,47 +35975,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/threads/{thread_id}/runs": { - "post": { "security": [ { "API Key": [] @@ -34295,15 +36002,18 @@ "Bearer Auth": [] } ], - "description": "Starts a run on the thread. The request body must include `assistant_id` (the assistant to execute). Include run inputs and options in the body as supported by this API.", + "x-public": true + }, + "delete": { + "description": "Deletes a tool identified by its UUID.", "tags": [ - "fleet threads" + "tools" ], - "summary": "Create thread run", + "summary": "Delete a tool by ID", "parameters": [ { - "description": "Thread id", - "name": "thread_id", + "description": "Tool UUID", + "name": "id", "in": "path", "required": true, "schema": { @@ -34312,32 +36022,15 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34347,7 +36040,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34357,7 +36050,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34367,27 +36060,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/threads/{thread_id}/runs/stream": { - "post": { "security": [ { "API Key": [] @@ -34399,15 +36087,18 @@ "Bearer Auth": [] } ], - "description": "Start a run on a thread and stream its output as Server-Sent Events. The connection stays open until the run completes; the client is responsible for closing it.", + "x-public": true + }, + "patch": { + "description": "Updates an existing tool identified by its UUID.", "tags": [ - "fleet threads" + "tools" ], - "summary": "Stream a thread run", + "summary": "Update a tool by ID", "parameters": [ { - "description": "Thread ID", - "name": "thread_id", + "description": "Tool UUID", + "name": "id", "in": "path", "required": true, "schema": { @@ -34417,11 +36108,11 @@ ], "responses": { "200": { - "description": "SSE event stream", + "description": "OK", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/tools.Tool" } } } @@ -34431,7 +36122,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34441,7 +36132,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34451,7 +36142,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34461,37 +36152,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/threads.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/trigger-templates": { - "get": { "security": [ { "API Key": [] @@ -34503,41 +36179,64 @@ "Bearer Auth": [] } ], - "description": "Lists trigger templates with their config schema and auth requirements (paginated).", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.UpdateToolPayload" + } + } + } + } + } + }, + "/api/v1/platform/tools/{handle}": { + "get": { + "description": "Returns a tool identified by its handle.", "tags": [ - "fleet trigger-templates" + "tools" ], - "summary": "List trigger templates", + "summary": "Get a tool by handle", "parameters": [ { - "description": "Items per page (default 20, max 100)", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor returned by a prior response", - "name": "cursor", - "in": "query", + "description": "Tool handle", + "name": "handle", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Cursor" + "type": "string" } } ], "responses": { "200": { - "description": "OK" + "description": "OK", + "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/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34547,27 +36246,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "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/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/trigger-templates/{template_id}": { - "get": { "security": [ { "API Key": [] @@ -34579,15 +36283,18 @@ "Bearer Auth": [] } ], - "description": "Returns a single trigger template by id.", + "x-public": true + }, + "delete": { + "description": "Deletes a tool identified by its handle.", "tags": [ - "fleet trigger-templates" + "tools" ], - "summary": "Get trigger template", + "summary": "Delete a tool by handle", "parameters": [ { - "description": "Trigger template id", - "name": "template_id", + "description": "Tool handle", + "name": "handle", "in": "path", "required": true, "schema": { @@ -34596,15 +36303,25 @@ } ], "responses": { - "200": { - "description": "OK" + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.ErrorResponse" + } + } + } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34614,7 +36331,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34624,27 +36341,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/fleet/triggers": { - "get": { "security": [ { "API Key": [] @@ -34656,46 +36368,22 @@ "Bearer Auth": [] } ], - "description": "Lists triggers for the calling user (paginated). Filter by agent_id and/or template_id.", + "x-public": true + }, + "patch": { + "description": "Updates an existing tool identified by its handle.", "tags": [ - "fleet triggers" + "tools" ], - "summary": "List triggers", + "summary": "Update a tool by handle", "parameters": [ { - "description": "Filter by agent id", - "name": "agent_id", - "in": "query", - "schema": { - "type": "string", - "title": "Agent Id" - } - }, - { - "description": "Filter by trigger template id", - "name": "template_id", - "in": "query", - "schema": { - "type": "string", - "title": "Template Id" - } - }, - { - "description": "Items per page (default 20, max 100)", - "name": "page_size", - "in": "query", - "schema": { - "type": "integer", - "title": "Page Size" - } - }, - { - "description": "Opaque pagination cursor returned by a prior response", - "name": "cursor", - "in": "query", + "description": "Tool handle", + "name": "handle", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Cursor" + "type": "string" } } ], @@ -34705,7 +36393,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.TriggerListResponse" + "$ref": "#/components/schemas/tools.Tool" } } } @@ -34715,7 +36403,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34725,7 +36413,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } @@ -34735,25 +36423,32 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "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/triggers.ErrorResponse" + "$ref": "#/components/schemas/tools.ErrorResponse" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { "API Key": [] @@ -34765,19 +36460,74 @@ "Bearer Auth": [] } ], - "description": "Creates a trigger for an agent and returns the created trigger instance.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tools.UpdateToolPayload" + } + } + } + } + } + }, + "/api/v1/sessions/resolutions": { + "get": { + "description": "**Beta:** This endpoint is in active development and may change without notice. Returns the tracing project (session) an address names. An address is an AGENT (`id` and `environment`), an EXPERIMENT (`id`), or an EVALUATOR (no `id`: evaluator traces share one project per workspace). Send `kind` and `environment` in upper case, as listed; they are matched case-insensitively, while the Agent `id` is case-sensitive. An address that does not exist, or whose project you cannot read, is a 404. Pass the returned `session_id` to any endpoint that takes a project (session) ID. This is not supported on a BYOC data plane yet, and is a 501 there.", "tags": [ - "fleet triggers" + "sessions" + ], + "summary": "[Beta] Resolve an address to its tracing project", + "parameters": [ + { + "description": "The kind of address.", + "name": "kind", + "in": "query", + "required": true, + "schema": { + "enum": [ + "AGENT", + "EXPERIMENT", + "EVALUATOR" + ], + "type": "string", + "title": "Kind" + } + }, + { + "description": "The Agent's user-assigned id for AGENT, or the experiment's id for EXPERIMENT. Not set for EVALUATOR.", + "name": "id", + "in": "query", + "schema": { + "type": "string", + "title": "Id" + } + }, + { + "description": "The Agent environment. Only set for AGENT.", + "name": "environment", + "in": "query", + "schema": { + "enum": [ + "LOCAL", + "DEVELOPMENT", + "STAGING", + "PRODUCTION" + ], + "type": "string", + "title": "Environment" + } + } ], - "summary": "Create trigger", - "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.Trigger" + "$ref": "#/components/schemas/addresses.ResolveResponse" } } } @@ -34787,7 +36537,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -34797,77 +36547,66 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "Conflict", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "502": { - "description": "Bad Gateway", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/triggers.CreateTriggerRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/fleet/triggers/{trigger_id}": { - "get": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Returns a single trigger by id for the calling user.", + "x-public": true + } + }, + "/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": [ - "fleet triggers" + "datasets" ], - "summary": "Get trigger", + "summary": "Fetch shared experiment runs for dataset examples", "parameters": [ { - "description": "Trigger id (UUID)", - "name": "trigger_id", + "description": "Dataset share token", + "name": "share_token", "in": "path", "required": true, "schema": { @@ -34881,7 +36620,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.Trigger" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" } } } @@ -34891,17 +36630,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -34911,92 +36640,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" - } - } - } - }, - "502": { - "description": "Bad Gateway", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" - } - } - } - } - }, - "x-hidden": true - }, - "delete": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Deletes a trigger by id for the calling user. The operation is idempotent - deleting a trigger that does not exist (or that belongs to another user) still returns 204.", - "tags": [ - "fleet triggers" - ], - "summary": "Delete trigger", - "parameters": [ - { - "description": "Trigger id (UUID)", - "name": "trigger_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35006,35 +36670,36 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-hidden": true - }, - "patch": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" + } + } } - ], - "description": "Updates a trigger by id for the calling user. agent_id is not mutable.", + } + } + }, + "/api/v2/datasets/{dataset_id}/experiment-runs": { + "post": { + "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": [ - "fleet triggers" + "datasets" ], - "summary": "Update trigger", + "summary": "Fetch experiment runs for dataset examples", "parameters": [ { - "description": "Trigger id (UUID)", - "name": "trigger_id", + "description": "Dataset ID", + "name": "dataset_id", "in": "path", "required": true, "schema": { @@ -35048,7 +36713,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.Trigger" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsResponseBody" } } } @@ -35058,7 +36723,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35068,7 +36733,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35078,17 +36743,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35098,613 +36773,602 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/triggers.UpdateTriggerRequest" + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsRequestBody" } } } - }, - "x-hidden": true + } } }, - "/v1/platform/alerts/{session_id}": { - "post": { - "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.", + "/api/v2/public/threads/{share_token}": { + "get": { + "description": "Returns the thread and project a share token is scoped to, plus the project's conversations config.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "alert_rules" + "threads" ], - "summary": "Create an alert rule", + "summary": "Get a public shared thread's manifest", "parameters": [ { - "description": "Session ID", - "name": "session_id", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { - "201": { - "description": "Alert rule created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.AlertRuleResponse" - } - } - } - }, - "400": { - "description": "Bad request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/threadshare.ThreadManifest" } } } }, - "429": { - "description": "Alert Rule Limit Reached", + "404": { + "description": "share token or shared thread not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.CreateAlertRuleRequest" - } - } - } - } + "x-public": true } }, - "/v1/platform/alerts/{session_id}/test": { - "post": { - "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.", + "/api/v2/public/threads/{share_token}/messages": { + "get": { + "description": "Streams the thread's conversation as server-sent events. SSE only.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "alert_rules" + "threads" ], - "summary": "Test an alert action to determine if configuration is valid", + "summary": "Stream messages for a public shared thread", "parameters": [ { - "description": "Session ID", - "name": "session_id", - "in": "path", + "description": "must be text/event-stream", + "name": "Accept", + "in": "header", "required": true, "schema": { "type": "string" } }, { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "description": "messages page size", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "title": "Page Size" + } + }, + { + "description": "opaque cursor from a previous page", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + }, + { + "description": "anchor the page on this trace", + "name": "trace_id", + "in": "query", + "schema": { + "type": "string", + "format": "uuid", + "title": "Trace Id" } } ], "responses": { "200": { - "description": "Alert action fired successfully", + "description": "text/event-stream", "content": { - "application/json": { + "text/event-stream": { "schema": { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] - } + "type": "string" } } } }, "400": { - "description": "Bad request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "share token or shared thread not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } + }, + "x-public": true } }, - "/v1/platform/alerts/{session_id}/{alert_rule_id}": { + "/api/v2/public/threads/{share_token}/runs/{run_id}": { "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Gets an alert rule.", + "description": "Returns a single run, including full inputs and outputs, provided its trace root belongs to the shared thread.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "alert_rules" + "threads" ], - "summary": "Get an alert rule", + "summary": "Get one run in a public shared thread", "parameters": [ { - "description": "Session ID", - "name": "session_id", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Run UUID", + "name": "run_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "description": "Run start_time coordinate (RFC3339)", + "name": "start_time", + "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": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Selects" } } ], "responses": { "200": { - "description": "Alert rule", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.AlertRuleResponse" + "$ref": "#/components/schemas/query.RunResponse" } } } }, "400": { - "description": "Bad request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not found", + "description": "share token, run, or shared thread not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - }, - "delete": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Deletes an alert rule", + }, + "x-public": true + } + }, + "/api/v2/public/threads/{share_token}/stats": { + "get": { + "description": "Returns aggregate stats for the thread identified by the share token.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "alert_rules" + "threads" ], - "summary": "Delete an alert rule", + "summary": "Get stats for a public shared thread", "parameters": [ { - "description": "Session ID", - "name": "session_id", - "in": "path", - "required": true, + "description": "application/json or text/event-stream", + "name": "Accept", + "in": "header", "schema": { "type": "string" } }, { - "description": "Alert rule ID", - "name": "alert_rule_id", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "description": "repeatable public thread stats fields to include", + "name": "selects", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Selects" } } ], "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/threads.QuerySingleThreadStatsResponseBody" } - } - } - }, - "400": { - "description": "Bad request", - "content": { - "application/json": { + }, + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "type": "string" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not found", + "description": "share token or shared thread not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - }, - "patch": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Updates an alert rule.", + }, + "x-public": true + } + }, + "/api/v2/public/threads/{share_token}/traces": { + "get": { + "description": "Returns a page of root traces belonging to the thread identified by the share token. The share token supplies the tenant, project, and thread scope.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "alert_rules" + "threads" ], - "summary": "Update an alert rule", + "summary": "List traces in a public shared thread", "parameters": [ { - "description": "Session ID", - "name": "session_id", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "description": "Alert rule ID", - "name": "alert_rule_id", - "in": "path", + "description": "repeatable public thread trace fields to include", + "name": "selects", + "in": "query", "required": true, + "style": "form", + "explode": true, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + }, + "title": "Selects" + } + }, + { + "description": "opaque cursor from a previous page", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + }, + { + "description": "page size (default 20, max 100)", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "title": "Page Size" + } + }, + { + "description": "ASC or DESC", + "name": "order", + "in": "query", + "schema": { + "type": "string", + "title": "Order" } } ], "responses": { "200": { - "description": "Alert rule updated", + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "allOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - ] - } + "$ref": "#/components/schemas/threads.QueryThreadTracesResponseBody" } } } }, "400": { - "description": "Bad request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not found", + "description": "share token or shared thread not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/alerts.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/alerts.UpdateAlertRuleRequest" - } - } - } - } + "x-public": true } }, - "/v1/platform/annotation-queues/{queue_id}/reviewers": { - "post": { - "security": [ + "/api/v2/public/threads/{share_token}/traces/{trace_id}/runs": { + "get": { + "description": "Returns every run in the given trace, provided that trace's root belongs to the shared thread.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "threads" + ], + "summary": "List runs of one trace in a public shared thread", + "parameters": [ { - "API Key": [] + "description": "application/json or text/event-stream", + "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": "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", + "description": "Trace root UUID", + "name": "trace_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" + } + }, + { + "description": "repeatable public run fields to include", + "name": "selects", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Selects" } } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/annotationqueues.AddReviewerResponse" + "$ref": "#/components/schemas/threads.PublicSharedThreadTraceRunsResponseBody" + } + }, + "text/event-stream": { + "schema": { + "type": "string" } } } @@ -35714,23 +37378,17 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "share token, trace, or shared thread not found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -35740,216 +37398,190 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/annotationqueues.AddReviewerRequest" + }, + "501": { + "description": "Not Implemented", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } } } } - } + }, + "x-public": true } }, - "/v1/platform/annotation-queues/{queue_id}/reviewers/{identity_id}": { - "delete": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Unassigns an identity as a reviewer for the queue. Idempotent.", + "/api/v2/public/{share_token}/run/{run_id}": { + "get": { + "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": [ - "annotation_queues" + "runs" ], - "summary": "Remove a reviewer from an annotation queue", + "summary": "Get a public shared trace run", "parameters": [ { - "description": "Queue ID", - "name": "queue_id", + "description": "application/json", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } + }, + { + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } }, { - "description": "Identity ID of the reviewer to remove", - "name": "identity_id", + "description": "Run UUID", + "name": "run_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } + { + "description": "Run start_time coordinate (RFC3339)", + "name": "start_time", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "date-time", + "title": "Start Time" } }, - "404": { - "description": "Not Found", + { + "description": "repeatable public run fields to include", + "name": "selects", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Selects" + } + } + ], + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/query.RunResponse" } } } }, - "500": { - "description": "Internal Server Error", + "400": { + "description": "bad request (missing or malformed start_time)", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - } - } - }, - "/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", + "404": { + "description": "share token or run not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ExamplesDeletedResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "501": { + "description": "no V2 backend configured and no V1 proxy fallback", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "422": { - "description": "Unprocessable Entity", + "504": { + "description": "gateway timeout or deadline exceeded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/examples.DeleteExamplesRequest" - } - } - } - } + "x-public": true } }, - "/v1/platform/datasets/{dataset_id}/examples": { + "/api/v2/public/{share_token}/runs/query": { "post": { - "security": [ + "description": "Returns all runs within the trace identified by the share token. The share token supplies the tenant, project, and trace scope.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "runs" + ], + "summary": "Query public shared trace runs", + "parameters": [ { - "API Key": [] + "description": "application/json or text/event-stream", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } }, { - "Tenant ID": [] + "description": "application/json", + "name": "Content-Type", + "in": "header", + "schema": { + "type": "string" + } }, { - "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.", - "tags": [ - "examples" - ], - "summary": "Upload Examples", - "parameters": [ - { - "description": "Dataset ID", - "name": "dataset_id", + "description": "Share token UUID", + "name": "share_token", "in": "path", "required": true, "schema": { @@ -35959,435 +37591,362 @@ } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ExamplesCreatedResponse" + "$ref": "#/components/schemas/query.QueryTraceResponseBody" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "share token or shared trace not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "Conflict", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "422": { - "description": "Unprocessable Entity", + "501": { + "description": "no V2 backend configured and no V1 proxy fallback", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, + "x-public": true, "requestBody": { "required": true, "content": { - "multipart/form-data": { + "application/json": { "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" - ] + "$ref": "#/components/schemas/query.PublicSharedTraceRunsRequestBody" } } } } - }, - "patch": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "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.", + } + }, + "/api/v2/runs/query": { + "post": { + "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\nWhen `ai_search` is set, `Accept: text/event-stream` is required; requests without it return 406. AI search is unavailable on deployments that route queries to the v1 backend and returns 501 there.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "examples" + "runs" ], - "summary": "Update Examples", + "summary": "Query runs", "parameters": [ { - "description": "Dataset ID", - "name": "dataset_id", - "in": "path", - "required": true, + "description": "application/json, or text/event-stream (required when ai_search is set)", + "name": "Accept", + "in": "header", "schema": { - "type": "string", - "format": "uuid" + "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/examples.ExamplesUpdatedResponse" + "$ref": "#/components/schemas/query.QueryRunsResponseBody" + } + }, + "text/event-stream": { + "schema": { + "$ref": "#/components/schemas/shared.SSEEvent" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "missing or invalid authentication", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", + "description": "session not found", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "Conflict", + "406": { + "description": "not acceptable (ai_search requires Accept: text/event-stream)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "422": { - "description": "Unprocessable Entity", + "description": "unprocessable entity (e.g. invalid UUID)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/examples.ErrorResponse" - } - } - } - } - }, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "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}" - ] - } - } - } - } - } - }, - "/v1/platform/engine/trial-response": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Records a user's response to the Engine trial ending modal.\naction must be \"acknowledge\", \"opt_out\", or \"mark_seen\".", - "tags": [ - "engine-trial" - ], - "summary": "Respond to Engine trial ending notice", - "parameters": [], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "500": { + "description": "internal server error", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "501": { + "description": "The requested filter syntax or ai_search is unavailable for this deployment", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "503": { + "description": "service unavailable", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "504": { + "description": "gateway timeout or deadline exceeded", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/engine_trial.trialResponseRequest" + "$ref": "#/components/schemas/query.QueryRunsRequestBody" } } } } } }, - "/v1/platform/evaluators": { + "/api/v2/runs/{run_id}": { "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "List evaluators for the current workspace, with optional filtering by type, name, tag, feedback key, or resource ID.", + "description": "Returns one run by ID for the given session. Use the `selects` query parameter (repeatable) to select fields to return.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "evaluators" + "runs" ], - "summary": "List evaluators", + "summary": "Get a single run", "parameters": [ { - "description": "Filter by evaluator type", - "name": "type", - "in": "query", + "description": "application/json", + "name": "Accept", + "in": "header", "schema": { - "type": "string", - "title": "Type" + "type": "string" } }, { - "description": "Filter by name substring (also searches creator names)", - "name": "name_contains", - "in": "query", + "description": "Run UUID", + "name": "run_id", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Name Contains" - } - }, - { - "description": "Filter by tag value IDs", - "name": "tag_value_id", - "in": "query", - "style": "form", - "explode": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Tag Value Id" + "format": "uuid" } }, { - "description": "Filter by feedback key", - "name": "feedback_key", + "description": "`project_id` is the UUID of the tracing project that owns the run.", + "name": "project_id", "in": "query", + "required": true, "schema": { "type": "string", - "title": "Feedback Key" + "format": "uuid", + "title": "Project Id" } }, { - "description": "Filter by resource IDs", - "name": "resource_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": false, + "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", + "LS_USER_ID" + ], "type": "string" }, - "type": "array", - "title": "Resource Id" + "title": "Selects" } }, { - "description": "Field to sort by", - "name": "sort_by", + "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", - "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": { - "default": 100, - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Offset for pagination", - "name": "offset", - "in": "query", - "schema": { - "default": 0, - "type": "integer", - "title": "Offset" + "format": "date-time", + "title": "Start Time" } } ], @@ -36397,174 +37956,131 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ListEvaluatorsResponse" + "$ref": "#/components/schemas/query.RunResponse" } } } }, "400": { - "description": "Bad Request", + "description": "bad request (missing or invalid query parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "run or session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - } - }, - "post": { - "security": [ - { - "API Key": [] }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Create a new LLM or code evaluator for the current workspace.", - "tags": [ - "evaluators" - ], - "summary": "Create evaluator", - "parameters": [], - "responses": { - "201": { - "description": "Created", + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.CreateEvaluatorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "400": { - "description": "Bad Request", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "501": { + "description": "not implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.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/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.CreateEvaluatorRequest" - } - } - } - } - }, - "delete": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Delete multiple evaluators by their IDs. Returns per-item success/failure.", + "x-public": true + } + }, + "/api/v2/runs/{run_id}/share": { + "post": { + "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": [ - "evaluators" + "runs" ], - "summary": "Bulk delete evaluators", + "summary": "Share a run", "parameters": [ { - "description": "Evaluator IDs to delete", - "name": "evaluator_ids", - "in": "query", + "description": "Run UUID", + "name": "run_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", + "format": "uuid" } } ], @@ -36574,7 +38090,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.BulkDeleteEvaluatorsResponse" + "$ref": "#/components/schemas/share.CreateShareTokenResponseBody" } } } @@ -36584,7 +38100,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -36594,7 +38110,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -36604,7 +38120,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "413": { + "description": "Request Entity Too Large", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -36614,16 +38150,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - } - }, - "/v1/platform/evaluators/spend": { - "get": { + }, "security": [ { "API Key": [] @@ -36635,88 +38167,64 @@ "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/share.CreateShareTokenRequestBody" + } + } + } + } + } + }, + "/api/v2/runs/{run_id}/url": { + "get": { + "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": [ - "evaluators" + "runs" ], - "summary": "Get evaluator spend", + "summary": "Get the LangSmith UI URL for a run", "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", + "description": "Run UUID", + "name": "run_id", + "in": "path", + "required": true, "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" + "format": "uuid" } }, { - "description": "Filter grouped results by evaluator type: 'llm' or 'code'. Only valid with group_by.", - "name": "type", + "description": "Project (session) UUID", + "name": "project_id", "in": "query", + "required": true, "schema": { "type": "string", - "title": "Type" + "title": "Project Id" } }, { - "description": "Filter grouped results by evaluator feedback key. Only valid with group_by.", - "name": "feedback_key", + "description": "Trace UUID", + "name": "trace_id", "in": "query", + "required": true, "schema": { "type": "string", - "title": "Feedback Key" + "title": "Trace Id" } }, { - "description": "Start of the 7-day window (YYYY-MM-DD).", - "name": "period_start", + "description": "Run start time in RFC3339 format; omit if unknown", + "name": "start_time", "in": "query", - "required": true, "schema": { "type": "string", - "title": "Period Start" + "title": "Start Time" } } ], @@ -36726,110 +38234,94 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.GetEvaluatorSpendResponse" + "$ref": "#/components/schemas/query.RunURLResponse" } } } }, "400": { - "description": "Bad Request", + "description": "missing or invalid query parameters", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", + "description": "project not found or does not belong to this workspace", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - } - }, - "/v1/platform/evaluators/{evaluator_id}": { - "get": { + }, "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Retrieve a single evaluator by its ID.", + "x-public": true + } + }, + "/api/v2/runs/{trace_id}/share": { + "delete": { + "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": [ - "evaluators" + "runs" ], - "summary": "Get evaluator", + "summary": "Unshare a run", "parameters": [ { - "description": "Evaluator ID", - "name": "evaluator_id", + "description": "Trace root UUID", + "name": "trace_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.Evaluator" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -36839,7 +38331,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -36849,17 +38341,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "413": { + "description": "Request Entity Too Large", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -36869,14 +38361,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - }, - "delete": { + }, "security": [ { "API Key": [] @@ -36888,81 +38378,189 @@ "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/share.DeleteShareTokenRequestBody" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes": { + "get": { + "description": "List sandboxes for the authenticated tenant, with optional filtering, sorting, and pagination.\nPage with page_size and cursor: replay the response's next_cursor until it comes back null, which is the only signal that no pages remain.\nCursors are opaque and only valid on this endpoint; do not parse or construct one.", "tags": [ - "evaluators" + "sandboxes" ], - "summary": "Delete evaluator", + "summary": "List sandboxes", "parameters": [ { - "description": "Evaluator ID", - "name": "evaluator_id", - "in": "path", - "required": true, + "description": "Number of results per page", + "name": "page_size", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "default": 20, + "title": "Page Size" } }, { - "description": "When true, delete all run rules for this evaluator before deleting the evaluator", - "name": "delete_run_rules", + "description": "Opaque pagination cursor from a prior response's next_cursor", + "name": "cursor", "in": "query", "schema": { - "type": "boolean", - "title": "Delete Run Rules" + "type": "string", + "title": "Cursor" } - } - ], - "responses": { - "204": { - "description": "No Content" }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" - } - } + { + "description": "Deprecated: use page_size. Maximum number of results", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "default": 50, + "title": "Limit" } }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" - } + { + "description": "Deprecated: use cursor. 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 (provisioning, ready, failed, stopped, deleting)", + "name": "status", + "in": "query", + "schema": { + "type": "string", + "title": "Status" + } + }, + { + "description": "Filter by workspace resource tag value IDs; all must match", + "name": "tag_value_id", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Tag Value Id" + } + }, + { + "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, stopped_at, idle_ttl_seconds, delete_after_stop_seconds)", + "name": "sort_by", + "in": "query", + "schema": { + "type": "string", + "default": "created_at", + "title": "Sort By" + } + }, + { + "description": "Sort direction (asc, desc)", + "name": "sort_order", + "in": "query", + "schema": { + "type": "string", + "default": "desc", + "title": "Sort Order" + } + }, + { + "description": "Deprecated: use sort_order. Sort direction (asc, desc)", + "name": "sort_direction", + "in": "query", + "schema": { + "type": "string", + "default": "desc", + "title": "Sort Direction" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.SandboxListResponse" + } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "invalid page_size, cursor, or sort_order, or a deprecated parameter combined with its replacement", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "422": { + "description": "invalid limit or offset", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -36972,14 +38570,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] @@ -36989,100 +38585,92 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Update an existing evaluator's name, LLM configuration, or code configuration.", + "x-public": true + }, + "post": { + "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. `snapshot_name` accepts a Docker-style `name` or `name:tag` reference (a bare name resolves to `name:latest`).", "tags": [ - "evaluators" - ], - "summary": "Update evaluator", - "parameters": [ - { - "description": "Evaluator ID", - "name": "evaluator_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "sandboxes" ], + "summary": "Create a sandbox", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.UpdateEvaluatorResponse" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, "400": { - "description": "Bad Request", + "description": "Snapshot not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "409": { + "description": "Name already exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "429": { + "description": "Quota exceeded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Sandbox creation failed or internal error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/evaluators.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/evaluators.UpdateEvaluatorRequest" + }, + "504": { + "description": "Sandbox did not become ready in time", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } } } } - } - } - }, - "/v1/platform/features": { - "get": { + }, "security": [ { "API Key": [] @@ -37092,33 +38680,49 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Returns a consolidated view of default models and disabled models per feature for the workspace.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.CreateSandboxPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/batch-delete": { + "post": { + "description": "Delete multiple sandboxes by name or UUID in a single request.", "tags": [ - "features" + "sandboxes" ], - "summary": "List feature configurations", + "summary": "Batch delete sandboxes", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/features.FeatureConfig" - } + "$ref": "#/components/schemas/sandboxes.BatchDeleteResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37128,7 +38732,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37138,17 +38742,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "parameters": [] - } - }, - "/v1/platform/features/{feature}/default-model": { - "put": { "security": [ { "API Key": [] @@ -37160,15 +38759,30 @@ "Bearer Auth": [] } ], - "description": "Sets or replaces the default model for a feature in the workspace.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.BatchDeleteRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}": { + "get": { + "description": "Retrieve a sandbox by name. Stale provisioning sandboxes are auto-failed.", "tags": [ - "features" + "sandboxes" ], - "summary": "Set default model for a feature", + "summary": "Get a sandbox", "parameters": [ { - "description": "Feature name", - "name": "feature", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -37177,35 +38791,22 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37215,24 +38816,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.UpsertDefaultModelRequest" - } - } - } - } - }, - "delete": { "security": [ { "API Key": [] @@ -37242,17 +38831,23 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Removes the default model for a feature in the workspace.", + "x-public": true + }, + "delete": { + "description": "Delete a sandbox by name or UUID. Tears down the sandbox runtime and removes the DB record.", "tags": [ - "features" + "sandboxes" ], - "summary": "Delete default model for a feature", + "summary": "Delete a sandbox", "parameters": [ { - "description": "Feature name", - "name": "feature", + "description": "Sandbox display name or UUID", + "name": "name", "in": "path", "required": true, "schema": { @@ -37262,24 +38857,14 @@ ], "responses": { "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" - } - } - } + "description": "No content" }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37289,16 +38874,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - } - }, - "/v1/platform/features/{feature}/disabled-models": { - "put": { + }, "security": [ { "API Key": [] @@ -37308,17 +38889,23 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Adds a model to the disabled list for a feature in the workspace.", + "x-public": true + }, + "patch": { + "description": "Update a sandbox's display name, retention, resources, tags, or proxy configuration. The name must be unique within the tenant. Proxy configuration sent to a sandbox that is not running is stored and applied when it next starts.", "tags": [ - "features" + "sandboxes" ], - "summary": "Disable a model for a feature", + "summary": "Update a sandbox", "parameters": [ { - "description": "Feature name", - "name": "feature", + "description": "Current sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -37327,35 +38914,42 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.SandboxResponse" + } + } + } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "409": { + "description": "Name already exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37365,26 +38959,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/features.DisableModelRequest" - } - } - } - } - } - }, - "/v1/platform/features/{feature}/disabled-models/{model}": { - "delete": { "security": [ { "API Key": [] @@ -37394,26 +38974,35 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Removes a model from the disabled list for a feature in the workspace.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.UpdateSandboxPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}/download-url": { + "post": { + "description": "Generate a tokenized link that downloads a single file from a sandbox with no further authentication. This mints a token rather than creating an addressable resource, so it returns 200 with no Location header. The token pins the sandbox, the file path, the response content type and disposition, and the sandbox flags, so a link cannot be repointed at another file or served under a weaker policy. The file is always served with a Content-Security-Policy: a sandbox directive, plus a default-src holding every fetch to the file's own download host and a set of pre-approved third-party origins. csp_sandbox_flags may loosen the sandbox with allow-downloads, allow-forms, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-popups, allow-presentation, allow-same-origin, allow-scripts, or allow-top-navigation-by-user-activation. Every file is served from its own host, derived from the sandbox and the path, so allow-same-origin gives a page localStorage and IndexedDB that no other file can read, and re-minting a link for the same file keeps them. csp_sandbox set to false drops the sandbox directive altogether, and csp_sandbox_flags must then be omitted. csp_source_bundles selects the third-party origins: cdnjs, google-fonts, jsdelivr, and unpkg are all allowed when the field is omitted, 'none' holds the file to its own host, and 'any' sends no default-src at all. Links never expire unless expires_in_seconds is set. The link is served from the sandbox service domain, not the API host.", "tags": [ - "features" + "sandboxes" ], - "summary": "Re-enable a disabled model for a feature", + "summary": "Generate a sandbox file download link", "parameters": [ { - "description": "Feature name", - "name": "feature", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Model name (URL-encoded)", - "name": "model", + "description": "Sandbox ID or name", + "name": "name", "in": "path", "required": true, "schema": { @@ -37422,35 +39011,42 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.DownloadURLResponse" + } + } + } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37460,16 +39056,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/features.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "501": { + "description": "Not Implemented", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - } - }, - "/v1/platform/fleet-webhooks/{webhook_id}/run": { - "post": { + }, "security": [ { "API Key": [] @@ -37481,15 +39083,30 @@ "Bearer Auth": [] } ], - "description": "Sends the request payload to the webhook's stored URL and returns the upstream response in a JSON envelope.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.DownloadURLPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}/service-url": { + "post": { + "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. Set access=restricted|workspace to instead enable durable LangSmith login (no token; users authenticate with their normal LangSmith session), or access=off to disable it. LangSmith login and token access are mutually exclusive per service URL.", "tags": [ - "fleet_webhooks" + "sandboxes" ], - "summary": "Run a fleet webhook", + "summary": "Generate a service access token", "parameters": [ { - "description": "Webhook UUID", - "name": "webhook_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -37503,57 +39120,72 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/agent_builder_webhooks.WebhookTestResult" + "$ref": "#/components/schemas/sandboxes.ServiceURLResponse" } } } }, "400": { - "description": "invalid request", + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "webhook not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "502": { - "description": "webhook request failed", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/platform/fleet/mcp-servers": { - "get": { + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "501": { + "description": "Not Implemented", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + } + }, "security": [ { "API Key": [] @@ -37565,19 +39197,54 @@ "Bearer Auth": [] } ], - "description": "Returns MCP servers visible to the caller after ABAC filtering. Service-key callers may pass X-Ls-User-Id to resolve per-user OAuth providers.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ServiceURLPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}/service-urls": { + "get": { + "description": "Returns one entry per port the sandbox is currently reachable on, so a caller can see what is shared before turning it off. Expired token grants are omitted.\nCursors are opaque and only valid on this endpoint; do not parse or construct one.", "tags": [ - "fleet mcp" + "sandboxes" ], - "summary": "List MCP servers", + "summary": "List a sandbox's shared service URLs", "parameters": [ { - "description": "User UUID for per-user OAuth resolution (service keys)", - "name": "X-Ls-User-Id", - "in": "header", + "description": "Sandbox name or ID", + "name": "name", + "in": "path", + "required": true, "schema": { "type": "string" } + }, + { + "description": "Number of results per page", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "default": 20, + "title": "Page Size" + } + }, + { + "description": "Opaque pagination cursor from a prior response's next_cursor", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } } ], "responses": { @@ -37586,192 +39253,179 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } + "$ref": "#/components/schemas/sandboxes.ServiceURLGrantListResponse" } } } }, "400": { - "description": "Bad Request", + "description": "invalid page_size or cursor", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "sandbox not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "x-hidden": true - }, - "post": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Registers a new MCP server configuration for the workspace.", + "x-public": true + }, + "delete": { + "description": "Removes the sharing grant for one port, or for every port when port is omitted. A LangSmith login URL stops working immediately. A previously minted service token is not revoked and stays valid until it expires, but no new one can be issued from the removed grant.", "tags": [ - "fleet mcp" + "sandboxes" ], - "summary": "Create MCP server", - "parameters": [], - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } - } + "summary": "Stop sharing a sandbox service URL", + "parameters": [ + { + "description": "Sandbox name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Port to stop sharing. Omit to stop sharing every port.", + "name": "port", + "in": "query", + "schema": { + "type": "integer", + "title": "Port" } + } + ], + "responses": { + "204": { + "description": "deleted" }, "400": { - "description": "Bad Request", + "description": "bad request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "409": { - "description": "Conflict", + "404": { + "description": "sandbox not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.CreateMcpServerPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/platform/fleet/mcp-servers/{mcp_server_id}": { - "get": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Returns a single MCP server by ID.", + "x-public": true + } + }, + "/api/v2/sandboxes/boxes/{name}/snapshot": { + "post": { + "description": "Create a snapshot by capturing the current state of a sandbox or promoting an existing checkpoint.", "tags": [ - "fleet mcp" + "sandboxes" ], - "summary": "Get MCP server", + "summary": "Capture a snapshot from a sandbox", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -37780,12 +39434,12 @@ } ], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" } } } @@ -37795,65 +39449,70 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "sandbox must be running for Docker image export", + "headers": { + "X-Should-Retry": { + "description": "false for deterministic state conflicts", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal Server Error", + "422": { + "description": "Unprocessable Entity", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "503": { - "description": "Service Unavailable", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] @@ -37865,15 +39524,30 @@ "Bearer Auth": [] } ], - "description": "Deletes an MCP server configuration.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.CaptureSnapshotPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/boxes/{name}/start": { + "post": { + "description": "Start a stopped or failed sandbox. This endpoint is not idempotent.", "tags": [ - "fleet mcp" + "sandboxes" ], - "summary": "Delete MCP server", + "summary": "Start a sandbox", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -37882,25 +39556,22 @@ } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "202": { + "description": "Accepted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.SandboxResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37910,7 +39581,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37920,7 +39591,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -37930,25 +39601,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] @@ -37960,15 +39618,20 @@ "Bearer Auth": [] } ], - "description": "Partially updates an MCP server. Tool list cache is invalidated on success.", + "x-public": true + } + }, + "/api/v2/sandboxes/boxes/{name}/status": { + "get": { + "description": "Retrieve the lightweight status of a sandbox for polling.", "tags": [ - "fleet mcp" + "sandboxes" ], - "summary": "Update MCP server", + "summary": "Get sandbox status", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -37982,37 +39645,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.McpServer" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.SandboxStatusResponse" } } } @@ -38022,7 +39655,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -38032,37 +39665,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.UpdateMcpServerPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/platform/fleet/mcp-servers/{mcp_server_id}/oauth-provider": { - "post": { "security": [ { "API Key": [] @@ -38072,17 +39680,25 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "description": "Discovers and registers an OAuth provider for a user against an MCP server configured with per-user dynamic client mode. Idempotent when a mapping already exists.", + "x-public": true + } + }, + "/api/v2/sandboxes/boxes/{name}/stop": { + "post": { + "description": "Stop a ready sandbox. This endpoint is not idempotent; the filesystem is preserved for later restart.", "tags": [ - "fleet mcp" + "sandboxes" ], - "summary": "Register per-user MCP OAuth provider", + "summary": "Stop a sandbox", "parameters": [ { - "description": "MCP server ID", - "name": "mcp_server_id", + "description": "Sandbox display name", + "name": "name", "in": "path", "required": true, "schema": { @@ -38091,32 +39707,25 @@ } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderResponse" - } - } - } + "204": { + "description": "Sandbox stopped" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -38126,7 +39735,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -38136,37 +39745,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_servers.McpServerAPIError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderPayload" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/platform/fleet/providers/github-app/auth": { - "post": { "security": [ { "API Key": [] @@ -38178,101 +39762,69 @@ "Bearer Auth": [] } ], - "description": "Generate a GitHub OAuth link for the current user to connect their GitHub account.", + "x-public": true + } + }, + "/api/v2/sandboxes/browsers": { + "post": { + "description": "Beta: create a browser sandbox, which runs one persistent Chrome that other sandboxes attach to. Logins made in it persist across restarts. It keeps its memory when it stops and is never deleted automatically.", "tags": [ - "fleet github-app" + "sandboxes" ], - "summary": "Get GitHub OAuth authorization link", + "summary": "Create a browser (beta)", + "parameters": [], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/github_app.UserAuthLinkResponse" - } - } - } - }, - "400": { - "description": "Bad Request", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.BrowserResponse" } } } }, - "503": { - "description": "Service Unavailable", + "409": { + "description": "Name already exists", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } - } - }, - "parameters": [], - "x-hidden": true - } - }, - "/v1/platform/fleet/providers/github-app/connection": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] }, - { - "Bearer Auth": [] - } - ], - "description": "Return the current user's GitHub connection status and metadata.", - "tags": [ - "fleet github-app" - ], - "summary": "Get GitHub user connection status", - "responses": { - "200": { - "description": "OK", + "422": { + "description": "Validation error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.UserConnectionStatus" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "429": { + "description": "Quota exceeded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "parameters": [], - "x-hidden": true - }, - "delete": { "security": [ { "API Key": [] @@ -38284,40 +39836,70 @@ "Bearer Auth": [] } ], - "description": "Remove the current user's GitHub connection and all linked installations.", + "x-beta": true, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.CreateBrowserPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/browsers/{name}": { + "get": { + "description": "Beta: get a browser and the windows attached to it.", "tags": [ - "fleet github-app" + "sandboxes" + ], + "summary": "Get a browser (beta)", + "parameters": [ + { + "description": "Browser name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Delete GitHub user connection", "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.BrowserResponse" + } + } + } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Browser not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "parameters": [], - "x-hidden": true - }, - "patch": { "security": [ { "API Key": [] @@ -38329,69 +39911,70 @@ "Bearer Auth": [] } ], - "description": "Update the actor preference for the current user's GitHub connection.", + "x-beta": true, + "x-public": true + } + }, + "/api/v2/sandboxes/browsers/{name}/attachments": { + "post": { + "description": "Beta: give a sandbox its own window of the browser, or, with no sandbox, open a window for the person calling (or, with controller \"agent\", for a client to drive over api_cdp_url). The response's cdp_url is the Chrome DevTools endpoint the sandbox connects to, and api_cdp_url the same endpoint through the API; a client can open more tabs, which stay in its window. Windows share the browser's cookies and logins. Keeping each sandbox to its own window is best effort, not a security boundary: attach only sandboxes you would trust with every login in the browser. With share_localhost, the browser can also reach the servers the sandbox runs, at the response's localhost_alias. Attaching takes, for the browser and for the attached sandbox each, being its creator or a role with sandboxes:exec. With unrestricted, nothing is filtered: the window's CDP clients (its sandbox, or anyone using its api_cdp_url) get the whole browser, including people's windows, every site's cookies, and commands that close it. It needs nothing beyond what any attach needs.", "tags": [ - "fleet github-app" + "sandboxes" + ], + "summary": "Attach a sandbox to a browser (beta)", + "parameters": [ + { + "description": "Browser name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Update GitHub user connection", - "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.UserConnectionStatus" + "$ref": "#/components/schemas/sandboxes.BrowserAttachment" } } } }, "400": { - "description": "Bad Request", + "description": "Size out of range, or controller is not agent or user", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "Not Found", + "description": "Browser or sandbox not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/github_app.UpdateUserConnectionRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/platform/fleet/providers/github-app/install": { - "post": { "security": [ { "API Key": [] @@ -38403,116 +39986,72 @@ "Bearer Auth": [] } ], - "description": "Generate a link to install the GitHub App for the current organization.", - "tags": [ - "fleet github-app" - ], - "summary": "Get GitHub App install link", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/github_app.InstallLinkResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service Unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" - } + "x-beta": true, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.AttachBrowserPayload" } } } - }, - "parameters": [], - "x-hidden": true + } } }, - "/v1/platform/fleet/providers/github-app/installations": { - "get": { - "security": [ - { - "API Key": [] - }, + "/api/v2/sandboxes/browsers/{name}/attachments/{attachment_id}": { + "delete": { + "description": "Beta: close the window and stop the sandbox from making new connections to the browser.", + "tags": [ + "sandboxes" + ], + "summary": "Detach a sandbox from a browser (beta)", + "parameters": [ { - "Tenant ID": [] + "description": "Browser name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, { - "Bearer Auth": [] + "description": "Attachment ID", + "name": "attachment_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } ], - "description": "Return GitHub App installations linked to the current user from\nour database. This is a cache — it does not hit the GitHub API.\nUse POST /installations/refresh to force a fresh sync from GitHub.", - "tags": [ - "fleet github-app" - ], - "summary": "List GitHub App installations", "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github_app.Installation" - } - } - } - } + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Browser or attachment not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "parameters": [], - "x-hidden": true - } - }, - "/v1/platform/fleet/providers/github-app/installations/refresh": { - "post": { "security": [ { "API Key": [] @@ -38524,62 +40063,87 @@ "Bearer Auth": [] } ], - "description": "Trigger a live sync with GitHub for the current user's GitHub App\ninstallations. Upserts new installations, deletes stale ones, and\nreturns the refreshed list. Requires an existing GitHub connection.", + "x-beta": true, + "x-public": true + }, + "patch": { + "description": "Beta: size a window so its page is width by height CSS pixels. The window keeps that size until resized again, through this call or over CDP with Browser.setWindowBounds; the live view scales to fit it rather than resizing it. A browser that is not running cannot be resized.", "tags": [ - "fleet github-app" + "sandboxes" + ], + "summary": "Resize a browser window (beta)", + "parameters": [ + { + "description": "Browser name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Attachment ID", + "name": "attachment_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Refresh GitHub App installations", "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github_app.Installation" - } + "$ref": "#/components/schemas/sandboxes.BrowserAttachment" } } } }, "400": { - "description": "Bad Request", + "description": "Size out of range", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "Not Found", + "description": "Browser or attachment not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "409": { + "description": "The browser is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "parameters": [], - "x-hidden": true - } - }, - "/v1/platform/fleet/providers/github-app/installations/{id}": { - "delete": { "security": [ { "API Key": [] @@ -38591,15 +40155,40 @@ "Bearer Auth": [] } ], - "description": "Remove a GitHub App installation link for the current user.", + "x-beta": true, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.UpdateBrowserAttachmentPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/browsers/{name}/attachments/{attachment_id}/controller": { + "post": { + "description": "Beta: give the window to a person (\"user\") or back to the attached sandbox (\"agent\"). It takes effect at once and does not wait for anyone. While a person has control, the attached sandbox's commands that read or act on the page fail with a \"human has control\" error, and it receives no page content. The window's current controller is in the browser's attachments.", "tags": [ - "fleet github-app" + "sandboxes" ], - "summary": "Delete a GitHub App installation", + "summary": "Set who controls a browser window (beta)", "parameters": [ { - "description": "Installation ID", - "name": "id", + "description": "Browser name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Attachment ID", + "name": "attachment_id", "in": "path", "required": true, "schema": { @@ -38608,35 +40197,47 @@ } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.BrowserAttachment" + } + } + } }, "400": { - "description": "Bad Request", + "description": "controller is not agent or user", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, "404": { - "description": "Not Found", + "description": "Browser or attachment not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/platform/fleet/providers/github-app/installations/{id}/repos": { - "get": { "security": [ { "API Key": [] @@ -38648,15 +40249,40 @@ "Bearer Auth": [] } ], - "description": "Return repositories accessible to the specified GitHub App installation.", + "x-beta": true, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.SetBrowserControllerPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/browsers/{name}/attachments/{attachment_id}/links": { + "post": { + "description": "Beta: mint a view link and an act link for one window, as every attachment response does, with a chosen lifetime and the origins allowed to embed the window's pages in an iframe. Without embed_origins no page may frame them. An embedded page sends its parent window messages when control changes and when it connects or disconnects (see the browser guide). Either link opens the window to anyone who holds it until it expires; detaching the window ends it early. Minting takes being the browser's creator or a role with sandboxes:exec.", "tags": [ - "fleet github-app" + "sandboxes" ], - "summary": "List repositories for a GitHub App installation", + "summary": "Create links to a browser window (beta)", "parameters": [ { - "description": "Installation ID", - "name": "id", + "description": "Browser name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Attachment ID", + "name": "attachment_id", "in": "path", "required": true, "schema": { @@ -38670,150 +40296,146 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github_app.Repository" - } + "$ref": "#/components/schemas/sandboxes.BrowserWindowLinks" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", + "description": "An embed origin is not an https origin, or ttl_seconds is out of range", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "403": { + "description": "The caller neither created the browser nor has sandboxes:exec", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } - } - }, - "x-hidden": true - } - }, - "/v1/platform/fleet/providers/github-app/tokens": { - "post": { - "security": [ - { - "API Key": [] }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Return a short-lived GitHub access token scoped to the given repository.", - "tags": [ - "fleet github-app" - ], - "summary": "Request a GitHub access token", - "parameters": [], - "responses": { - "200": { - "description": "OK", + "404": { + "description": "Browser or attachment not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.UserTokenResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "409": { + "description": "The browser is not running", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "501": { + "description": "The browser beta is not enabled, or window links are not available", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-beta": true, + "x-public": true, "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.TokenRequest" + "$ref": "#/components/schemas/sandboxes.CreateBrowserWindowLinksPayload" } } } - }, - "x-hidden": true + } } }, - "/v1/platform/fleet/providers/github-app/webhooks": { + "/api/v2/sandboxes/browsers/{name}/attachments/{attachment_id}/tabs": { "post": { - "description": "Process GitHub App webhooks (installation lifecycle, installation_repositories). GitHub may deliver the same event more than once; handling re-applies the current repository-selection state and is safe to repeat.", + "description": "Beta: open a tab in the window, at about:blank when no URL is given.", "tags": [ - "fleet github-app" + "sandboxes" + ], + "summary": "Open a tab in a browser window (beta)", + "parameters": [ + { + "description": "Browser name or ID", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "Attachment ID", + "name": "attachment_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } ], - "summary": "Handle GitHub App webhook events", "responses": { - "200": { - "description": "OK" + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.BrowserTab" + } + } + } }, - "400": { - "description": "Bad Request", + "404": { + "description": "Browser or attachment not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/github_app.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "parameters": [], - "x-hidden": true - } - }, - "/v1/platform/fleet/usage/agents": { - "get": { "security": [ { "API Key": [] @@ -38825,100 +40447,81 @@ "Bearer Auth": [] } ], - "description": "Returns the top agents in the workspace with cost data for the given time window. Defaults to sorting by cost descending; pass sort_by and sort_order to change. Data is sourced entirely from ClickHouse run metadata.", + "x-beta": true, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.OpenBrowserTabPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/browsers/{name}/attachments/{attachment_id}/tabs/{tab_id}": { + "delete": { + "description": "Beta: close a tab in the window.", "tags": [ - "fleet usage" + "sandboxes" ], - "summary": "List fleet agents with usage", + "summary": "Close a tab in a browser window (beta)", "parameters": [ { - "description": "Max results (max 100)", - "name": "limit", - "in": "query", - "schema": { - "default": 20, - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Start of cost window (ISO8601)", - "name": "start_time", - "in": "query", + "description": "Browser name or ID", + "name": "name", + "in": "path", "required": true, "schema": { - "type": "string", - "title": "Start Time" + "type": "string" } }, { - "description": "End of cost window (ISO8601)", - "name": "end_time", - "in": "query", + "description": "Attachment ID", + "name": "attachment_id", + "in": "path", "required": true, "schema": { - "type": "string", - "title": "End Time" - } - }, - { - "description": "Sort field (cost, runs, last_used, first_used)", - "name": "sort_by", - "in": "query", - "schema": { - "default": "cost", - "type": "string", - "title": "Sort By" + "type": "string" } }, { - "description": "Sort direction (asc, desc)", - "name": "sort_order", - "in": "query", + "description": "Tab ID", + "name": "tab_id", + "in": "path", + "required": true, "schema": { - "default": "desc", - "type": "string", - "title": "Sort Order" + "type": "string" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/usage.AgentUsageResponse" - } - } - } + "204": { + "description": "No Content" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Browser, window or tab not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/errutil.UserError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/errutil.InternalError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/platform/fleet/usage/models": { - "get": { "security": [ { "API Key": [] @@ -38930,60 +40533,25 @@ "Bearer Auth": [] } ], - "description": "Returns the top models used in the workspace with aggregated cost and distinct run counts for the given time window. Defaults to sorting by cost descending; pass sort_by and sort_order to change.", + "x-beta": true, + "x-public": true + } + }, + "/api/v2/sandboxes/browsers/{name}/extensions/load": { + "post": { + "description": "Beta: load the unpacked extensions placed in the browser's /var/lib/browserd/extensions (one per directory) that its Chrome does not have yet. Chrome loads them while running, so windows, tabs and connections are left as they are. Extensions already loaded stay loaded, even if removed from the directory, until Chrome next launches.", "tags": [ - "fleet usage" + "sandboxes" ], - "summary": "List fleet models with usage", + "summary": "Load a browser's extensions (beta)", "parameters": [ { - "description": "Max results (max 100)", - "name": "limit", - "in": "query", - "schema": { - "default": 20, - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Start of window (ISO8601)", - "name": "start_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Start Time" - } - }, - { - "description": "End of window (ISO8601)", - "name": "end_time", - "in": "query", + "description": "Browser name or ID", + "name": "name", + "in": "path", "required": true, "schema": { - "type": "string", - "title": "End Time" - } - }, - { - "description": "Sort field (cost, runs, last_used)", - "name": "sort_by", - "in": "query", - "schema": { - "default": "cost", - "type": "string", - "title": "Sort By" - } - }, - { - "description": "Sort direction (asc, desc)", - "name": "sort_order", - "in": "query", - "schema": { - "default": "desc", - "type": "string", - "title": "Sort Order" + "type": "string" } } ], @@ -38993,37 +40561,52 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/usage.ModelUsageResponse" + "$ref": "#/components/schemas/sandboxes.LoadBrowserExtensionsResponse" } } } }, "400": { - "description": "Bad Request", + "description": "An extension could not be loaded", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/errutil.UserError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Browser not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "409": { + "description": "The browser is not running", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "501": { + "description": "The browser beta is not enabled", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/errutil.InternalError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/platform/fleet/usage/tools": { - "get": { "security": [ { "API Key": [] @@ -39035,60 +40618,43 @@ "Bearer Auth": [] } ], - "description": "Returns the top tools in the workspace with run counts, latency, and agent counts for the given time window. Defaults to sorting by runs descending; pass sort_by and sort_order to change.", + "x-beta": true, + "x-public": true + } + }, + "/api/v2/sandboxes/registries": { + "get": { + "description": "List sandbox registries for pulling private images.", "tags": [ - "fleet usage" + "sandboxes" ], - "summary": "List fleet tools with usage", + "summary": "List registries", "parameters": [ { - "description": "Max results (max 100)", + "description": "Maximum number of registries to return", "name": "limit", "in": "query", "schema": { - "default": 20, "type": "integer", "title": "Limit" } }, { - "description": "Start of window (ISO8601)", - "name": "start_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Start Time" - } - }, - { - "description": "End of window (ISO8601)", - "name": "end_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "End Time" - } - }, - { - "description": "Sort field (runs, avg_latency_ms, agent_count, last_used)", - "name": "sort_by", + "description": "Number of registries to skip", + "name": "offset", "in": "query", "schema": { - "default": "runs", - "type": "string", - "title": "Sort By" + "type": "integer", + "title": "Offset" } }, { - "description": "Sort direction (asc, desc)", - "name": "sort_order", + "description": "Filter to registries whose name contains this substring", + "name": "name_contains", "in": "query", "schema": { - "default": "desc", "type": "string", - "title": "Sort Order" + "title": "Name Contains" } } ], @@ -39098,7 +40664,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/usage.ToolUsageResponse" + "$ref": "#/components/schemas/sandboxes.RegistryListResponse" } } } @@ -39108,7 +40674,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/errutil.UserError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39118,17 +40694,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/errutil.InternalError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v1/platform/fleet/usage/users": { - "get": { "security": [ { "API Key": [] @@ -39140,70 +40711,22 @@ "Bearer Auth": [] } ], - "description": "Returns the top users with aggregated cost data for the given time window. Defaults to sorting by cost descending; pass sort_by and sort_order to change.", + "x-public": true + }, + "post": { + "description": "Create a sandbox registry for pulling private images.", "tags": [ - "fleet usage" - ], - "summary": "List fleet users with usage", - "parameters": [ - { - "description": "Max results (max 100)", - "name": "limit", - "in": "query", - "schema": { - "default": 20, - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Start of cost window (ISO8601)", - "name": "start_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Start Time" - } - }, - { - "description": "End of cost window (ISO8601)", - "name": "end_time", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "End Time" - } - }, - { - "description": "Sort field (cost, runs, agent_count, last_used, first_used)", - "name": "sort_by", - "in": "query", - "schema": { - "default": "cost", - "type": "string", - "title": "Sort By" - } - }, - { - "description": "Sort direction (asc, desc)", - "name": "sort_order", - "in": "query", - "schema": { - "default": "desc", - "type": "string", - "title": "Sort Order" - } - } + "sandboxes" ], + "summary": "Create a registry", + "parameters": [], "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/usage.UserUsageResponse" + "$ref": "#/components/schemas/sandboxes.RegistryResponse" } } } @@ -39213,212 +40736,91 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/errutil.UserError" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/errutil.InternalError" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } - } - }, - "x-hidden": true - } - }, - "/v1/platform/gateway-policies": { - "get": { - "security": [ - { - "API Key": [] }, - { - "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.", - "tags": [ - "gateway-policies" - ], - "summary": "List gateway policies", - "responses": { - "200": { - "description": "OK", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationRead", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "AWS IAM role authentication is not configured", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "parameters": [] - }, - "post": { "security": [ { "API Key": [] }, { - "Bearer Auth": [] - } - ], - "description": "Creates a gateway policy for the calling organization.\n\n**policy_type** is one of `spend_cap`, `default_spend_cap`, or\n`guard`. 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\": }`\n`timeout_seconds` (optional, 0.1–30) caps guard pipeline execution time; defaults to 2s.\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:** if a policy with the same\n`subject_matchers` already exists in this organization, the\nexisting policy is updated in place instead of a duplicate\nbeing created. `id` is preserved. Returns 201 either way.", - "tags": [ - "gateway-policies" - ], - "summary": "Create a gateway policy", - "parameters": [], - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" - } - } - } - }, - "400": { - "description": "validation failure (bad matchers, unknown policy_type, missing required field)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "401": { - "description": "missing or invalid auth", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "403": { - "description": "LLM Gateway not enabled for the organization, or caller lacks OrganizationManage", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "409": { - "description": "policy name conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$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}" + "Tenant ID": [] }, { - "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}" + "Bearer Auth": [] } ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.CreateGatewayPolicyRequest" + "$ref": "#/components/schemas/sandboxes.CreateRegistryPayload" } } } } } }, - "/v1/platform/gateway-policies/{id}": { + "/api/v2/sandboxes/registries/{name}": { "get": { - "security": [ - { - "API Key": [] - }, - { - "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": "Get a sandbox registry by name.", "tags": [ - "gateway-policies" + "sandboxes" ], - "summary": "Get a gateway policy", + "summary": "Get a registry", "parameters": [ { - "description": "Policy ID", - "name": "id", + "description": "Registry name", + "name": "name", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -39428,37 +40830,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.RegistryResponse" } } } }, "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/sandboxes.ErrorResponse" } } } }, "404": { - "description": "policy not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39468,36 +40860,39 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - }, - "delete": { + }, "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.", + "x-public": true + }, + "delete": { + "description": "Delete a sandbox registry by name.", "tags": [ - "gateway-policies" + "sandboxes" ], - "summary": "Delete a gateway policy", + "summary": "Delete a registry", "parameters": [ { - "description": "Policy ID", - "name": "id", + "description": "Registry name", + "name": "name", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -39505,32 +40900,22 @@ "204": { "description": "No Content" }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/gateway_policies.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/sandboxes.ErrorResponse" } } } }, "404": { - "description": "policy not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39540,36 +40925,39 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - }, - "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\": }`\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.", + "x-public": true + }, + "patch": { + "description": "Update a sandbox registry's name and/or credentials.", "tags": [ - "gateway-policies" + "sandboxes" ], - "summary": "Update a gateway policy", + "summary": "Update a registry", "parameters": [ { - "description": "Policy ID", - "name": "id", + "description": "Registry name", + "name": "name", "in": "path", "required": true, "schema": { - "type": "string", - "format": "uuid" + "type": "string" } } ], @@ -39579,140 +40967,212 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.GatewayPolicyRecord" + "$ref": "#/components/schemas/sandboxes.RegistryResponse" } } } }, "400": { - "description": "validation failure", + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "LLM Gateway not enabled, or caller lacks OrganizationManage", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "policy not found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "409": { - "description": "matcher edit collides with another policy in the same family", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "501": { + "description": "AWS IAM role authentication is not configured", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.errorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "x-codeSamples": [ + "security": [ { - "label": "spend_cap", - "lang": "json", - "source": "{\n \"config\": {\"window\": \"monthly\", \"limit_usd\": 200},\n \"enabled\": false\n}" + "API Key": [] }, { - "label": "guard", - "lang": "json", - "source": "{\n \"config\": {\"version\": 1, \"detect\": {\"pii\": true, \"secrets\": true}, \"timeout_seconds\": 5},\n \"enabled\": true\n}" + "Tenant ID": [] + }, + { + "Bearer Auth": [] } ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/gateway_policies.UpdateGatewayPolicyRequest" + "$ref": "#/components/schemas/sandboxes.UpdateRegistryPayload" } } } } } }, - "/v1/platform/hub/repos/{owner}/{repo}/directories": { + "/api/v2/sandboxes/snapshots": { "get": { - "security": [ + "description": "List workspace and published system snapshots, with optional filtering, sorting, and pagination.\nPage with page_size and cursor: replay the response's next_cursor until it comes back null, which is the only signal that no pages remain.\nCursors are opaque and only valid on this endpoint; do not parse or construct one.", + "tags": [ + "sandboxes" + ], + "summary": "List snapshots", + "parameters": [ { - "API Key": [] + "description": "Number of results per page", + "name": "page_size", + "in": "query", + "schema": { + "type": "integer", + "default": 20, + "title": "Page Size" + } }, { - "Tenant ID": [] + "description": "Opaque pagination cursor from a prior response's next_cursor", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } }, { - "Bearer Auth": [] - } - ], - "description": "Resolves the flattened file tree for an agent or skill repository at a specific commit, tag, or latest.", - "tags": [ - "directories" - ], - "summary": "Get directory contents", - "parameters": [ + "description": "Deprecated: use page_size. Maximum number of results", + "name": "limit", + "in": "query", + "schema": { + "type": "integer", + "default": 50, + "title": "Limit" + } + }, { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", - "in": "path", - "required": true, + "description": "Deprecated: use cursor. Pagination offset", + "name": "offset", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "default": 0, + "title": "Offset" } }, { - "description": "Repository handle", - "name": "repo", - "in": "path", - "required": true, + "description": "Filter by name substring", + "name": "name_contains", + "in": "query", "schema": { - "type": "string" + "type": "string", + "title": "Name Contains" } }, { - "description": "Commit hash/tag to resolve (defaults to latest)", - "name": "commit", + "description": "Filter by status (building, ready, failed, deleting)", + "name": "status", "in": "query", "schema": { "type": "string", - "title": "Commit" + "title": "Status" + } + }, + { + "description": "Filter by creator identity. Only 'me' is supported.", + "name": "created_by", + "in": "query", + "schema": { + "type": "string", + "title": "Created By" + } + }, + { + "description": "Filter by label. Repeatable; all must match. Use 'key' to match on key presence or 'key=value' for equality.", + "name": "label", + "in": "query", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Label" + } + }, + { + "description": "Sort column (name, status, created_at)", + "name": "sort_by", + "in": "query", + "schema": { + "type": "string", + "default": "created_at", + "title": "Sort By" + } + }, + { + "description": "Sort direction (asc, desc)", + "name": "sort_order", + "in": "query", + "schema": { + "type": "string", + "default": "desc", + "title": "Sort Order" + } + }, + { + "description": "Deprecated: use sort_order. Sort direction (asc, desc)", + "name": "sort_direction", + "in": "query", + "schema": { + "type": "string", + "default": "desc", + "title": "Sort Direction" } } ], @@ -39722,33 +41182,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/directories.GetDirectoryResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotListResponse" } } } }, "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "401": { - "description": "Unauthorized", + "description": "invalid page_size, cursor, or sort_order, or a deprecated parameter combined with its replacement", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39758,23 +41202,17 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "invalid limit or offset", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39784,17 +41222,12 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - }, - "delete": { + }, "security": [ { "API Key": [] @@ -39806,57 +41239,116 @@ "Bearer Auth": [] } ], - "description": "Deletes an agent or skill repository and its owned child file repositories.", + "x-public": true + }, + "post": { + "description": "Create a snapshot from a Docker image (async build). Names use lowercase registry-style components separated by slashes, up to 255 characters. The system/ namespace is read-only.", "tags": [ - "directories" + "sandboxes" ], - "summary": "Delete directory repository", - "parameters": [ - { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" + "summary": "Create a snapshot", + "parameters": [], + "responses": { + "201": { + "description": "Created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + } + } } }, - { - "description": "Repository handle", - "name": "repo", - "in": "path", - "required": true, - "schema": { - "type": "string" + "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" + } + } + } + } + }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.CreateSnapshotPayload" + } + } + } + } + } + }, + "/api/v2/sandboxes/snapshots-by-name/{name}": { + "get": { + "description": "Get a snapshot name and every tag under it, with the snapshot each tag resolves to. To fetch one snapshot, use /api/v2/sandboxes/snapshots/{snapshot_id}.", + "tags": [ + "sandboxes" + ], + "summary": "Get a snapshot name", + "parameters": [ + { + "description": "Snapshot name, without a tag", + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string" } } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.SnapshotNameResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39866,10 +41358,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39879,10 +41368,7 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -39892,19 +41378,12 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - } - }, - "/v1/platform/hub/repos/{owner}/{repo}/directories/commits": { - "post": { + }, "security": [ { "API Key": [] @@ -39916,24 +41395,20 @@ "Bearer Auth": [] } ], - "description": "Creates a new directory commit for an agent or skill repository by applying file/link create, update, and delete operations.", + "x-public": true + } + }, + "/api/v2/sandboxes/snapshots/{snapshot_id}": { + "get": { + "description": "Get a sandbox snapshot by ID or a registry-style reference, including system/default:latest. URL-encode references containing slashes. A bare name means name:latest, falling back to the newest ready untagged snapshot of that name. To list the tags under a name, use /api/v2/sandboxes/snapshots-by-name/{name}.", "tags": [ - "directories" + "sandboxes" ], - "summary": "Create directory commit", + "summary": "Get a snapshot", "parameters": [ { - "description": "Repository owner handle or '-' for current tenant", - "name": "owner", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Repository handle", - "name": "repo", + "description": "Snapshot UUID, a name:tag reference, or a bare snapshot name", + "name": "snapshot_id", "in": "path", "required": true, "schema": { @@ -39947,7 +41422,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/directories.CommitResponse" + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" } } } @@ -39957,62 +41432,102 @@ "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" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } + } + }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true + }, + "delete": { + "description": "Delete a snapshot by ID or by a Docker-style name[:tag] reference. The underlying storage is reclaimed asynchronously.", + "tags": [ + "sandboxes" + ], + "summary": "Delete a snapshot", + "parameters": [ + { + "description": "Snapshot UUID, or a name[:tag] reference", + "name": "snapshot_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Snapshot deleted" }, - "409": { - "description": "Conflict", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -40022,29 +41537,55 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/directories.CreateDirectoryCommitRequest" - } - } + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] } - } + ], + "x-public": true } }, - "/v1/platform/issues": { + "/api/v2/sandboxes/usage": { "get": { + "description": "Get current sandbox resource usage and quota limits for the workspace", + "tags": [ + "sandboxes" + ], + "summary": "Get sandbox resource usage", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.UsageResponse" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ErrorResponse" + } + } + } + } + }, "security": [ { "API Key": [] @@ -40054,109 +41595,115 @@ }, { "Bearer Auth": [] + }, + { + "X-Service-Key": [] } ], - "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.", + "x-public": true, + "parameters": [] + } + }, + "/api/v2/sandboxes/usage/costs": { + "get": { + "description": "Returns priced usage per sandbox or snapshot and UTC hour in the half-open requested interval. LCU uses the recorded compute amount for sandboxes; snapshots have zero LCU. LSU allocates the recorded workspace storage amount proportionally to attributed bytes, including checkpoints on their sandbox and snapshots as separate resources. Resource filters preserve each resource's share. Rate changes do not reprice recorded amounts. An access-filtered page can have no items and a non-null next_cursor; continue until next_cursor is null.", "tags": [ - "issues" + "sandboxes" ], - "summary": "[Beta] List issues", + "summary": "List hourly sandbox usage costs", "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", + "description": "Inclusive RFC3339 start time", + "name": "start_time", "in": "query", + "required": true, "schema": { "type": "string", - "title": "Session Name" + "format": "date-time", + "title": "Start Time" } }, { - "description": "Filter by status", - "name": "status", + "description": "Exclusive RFC3339 end time; the range must not exceed 31 days", + "name": "end_time", "in": "query", + "required": true, "schema": { "type": "string", - "enum": [ - "open", - "completed", - "ignored" - ], - "title": "Status" + "format": "date-time", + "title": "End Time" } }, { - "description": "Filter by severity", - "name": "severity", + "description": "Resource type filter", + "name": "resource_type", "in": "query", "schema": { - "type": "integer", "enum": [ - 0, - 1, - 2, - 3 + "SANDBOX", + "SNAPSHOT" ], - "title": "Severity" + "type": "string", + "title": "Resource Type" } }, { - "description": "Filter by tag (exact match)", - "name": "tag", + "description": "Resource UUID filter; repeat this parameter up to 100 times", + "name": "resource_ids", "in": "query", + "style": "form", + "explode": true, "schema": { - "type": "string", - "title": "Tag" + "type": "array", + "items": { + "type": "string" + }, + "title": "Resource Ids" } }, { - "description": "Return only issues updated at or after this RFC3339 timestamp", - "name": "updated_at", + "description": "Maximum rows to return", + "name": "page_size", "in": "query", "schema": { - "type": "string", - "title": "Updated At" + "maximum": 100, + "minimum": 1, + "type": "integer", + "default": 20, + "title": "Page Size" } }, { - "description": "Sort field", - "name": "sort_by", + "description": "HOUR returns hourly buckets. RESOURCE sums each resource over the requested interval and sets period_start to start_time.", + "name": "granularity", "in": "query", "schema": { - "type": "string", "enum": [ - "created_at", - "updated_at", - "severity" + "HOUR", + "RESOURCE" ], - "title": "Sort By" + "type": "string", + "default": "HOUR", + "title": "Granularity" } }, { - "description": "Page size (positive integer)", - "name": "limit", + "description": "Opaque pagination cursor", + "name": "cursor", "in": "query", "schema": { - "type": "integer", - "title": "Limit" + "type": "string", + "title": "Cursor" } }, { - "description": "Page offset (non-negative integer)", - "name": "offset", + "description": "Include usage totals across the filtered interval (RESOURCE only). Omitted when unrestricted resource access cannot be verified or the service does not support totals.", + "name": "include_totals", "in": "query", "schema": { - "type": "integer", - "title": "Offset" + "type": "boolean", + "default": false, + "title": "Include Totals" } } ], @@ -40166,85 +41713,120 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_session_issues.Issue" - } + "$ref": "#/components/schemas/sandboxes.SandboxUsageCostsResponse" } } } }, "400": { - "description": "Bad Request", + "description": "missing or invalid query parameters", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal Server Error", + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } + }, + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "x-public": true } }, - "/v1/platform/issues-agent": { + "/api/v2/sandboxes/{sandbox_id}/download": { "get": { - "security": [ + "description": "Download file contents from a sandbox filesystem path. Supports HTTP range requests: send a Range header (for example `bytes=0-1023`) to receive a 206 with only that byte range. Every response carries an ETag; send it back as If-Range to resume safely (a changed file returns 200 with the whole file instead of mismatched bytes) or as If-None-Match to get a 304 when the file is unchanged. HEAD returns the same headers, including the file's size in Content-Length, without the body.", + "tags": [ + "sandboxes" + ], + "summary": "Download a sandbox file", + "parameters": [ { - "API Key": [] + "description": "Sandbox ID or name", + "name": "sandbox_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } }, { - "Tenant ID": [] + "description": "File path to download", + "name": "path", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Path" + } }, { - "Bearer Auth": [] + "description": "Byte range to return, e.g. bytes=0-1023", + "name": "Range", + "in": "header", + "schema": { + "type": "string" + } } ], - "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", + "description": "File content", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" - } + "type": "string", + "format": "binary" + } + } + } + }, + "206": { + "description": "Partial file content", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" } } } @@ -40254,47 +41836,42 @@ "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" } } } }, - "500": { - "description": "Internal Server Error", + "416": { + "description": "Requested range not satisfiable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "string" } } } } }, - "parameters": [] - } - }, - "/v1/platform/issues/{id}/views": { - "post": { "security": [ { "API Key": [] @@ -40306,42 +41883,72 @@ "Bearer Auth": [] } ], - "description": "**Beta:** Records that the current user opened this issue.\nIdempotent. Drives the Engine tab unread-issues badge.", + "x-public": true + }, + "head": { + "description": "Download file contents from a sandbox filesystem path. Supports HTTP range requests: send a Range header (for example `bytes=0-1023`) to receive a 206 with only that byte range. Every response carries an ETag; send it back as If-Range to resume safely (a changed file returns 200 with the whole file instead of mismatched bytes) or as If-None-Match to get a 304 when the file is unchanged. HEAD returns the same headers, including the file's size in Content-Length, without the body.", "tags": [ - "issues" + "sandboxes" ], - "summary": "[Beta] Mark issue viewed", + "summary": "Download a sandbox file", "parameters": [ { - "description": "Issue ID (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" + } + }, + { + "description": "Byte range to return, e.g. bytes=0-1023", + "name": "Range", + "in": "header", + "schema": { + "type": "string" + } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "File content", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } }, - "400": { - "description": "Bad Request", + "206": { + "description": "Partial file content", "content": { - "application/json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "type": "string", + "format": "binary" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -40351,7 +41958,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -40361,26 +41968,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "416": { + "description": "Requested range not satisfiable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "type": "string" } } } } - } - } - }, - "/v1/platform/mcp-vendors": { - "get": { + }, "security": [ { "API Key": [] @@ -40392,28 +41995,44 @@ "Bearer Auth": [] } ], - "description": "Returns the catalog of available MCP vendors.", + "x-public": true + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute": { + "post": { + "description": "Execute a command inside a sandbox and return stdout, stderr, and exit code. Use the streaming execute endpoints for long-running commands that may exceed the synchronous request deadline.", "tags": [ - "mcp_vendors" + "sandboxes" + ], + "summary": "Execute a sandbox command", + "parameters": [ + { + "description": "Sandbox ID or name", + "name": "sandbox_id", + "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/sandboxes.ExecResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -40423,90 +42042,68 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } - } - }, - "parameters": [] - } - }, - "/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", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.GetMcpVendorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "409": { + "description": "The sandbox closed its connection during execution", + "headers": { + "X-Should-Retry": { + "description": "false; the interrupted command is not safe to replay", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Synchronous execution exceeded the request deadline", + "headers": { + "X-Should-Retry": { + "description": "false; use streaming execute for long-running commands", + "schema": { + "type": "string" + } + } + }, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - } - }, - "/v1/platform/mcp-vendors/{vendor_slug}/account": { - "get": { + }, "security": [ { "API Key": [] @@ -40518,15 +42115,30 @@ "Bearer Auth": [] } ], - "description": "Resolves OAuth token and returns the vendor's account info.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ExecRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute/stream/resume": { + "post": { + "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": [ - "mcp_vendors" + "sandboxes" ], - "summary": "Get vendor account", + "summary": "Resume a streamed sandbox command", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -40536,11 +42148,11 @@ ], "responses": { "200": { - "description": "OK", + "description": "SSE event stream", "content": { - "application/json": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountResponseList" + "type": "string" } } } @@ -40550,56 +42162,52 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - } - }, - "/v1/platform/mcp-vendors/{vendor_slug}/mcp-servers": { - "get": { + }, "security": [ { "API Key": [] @@ -40611,47 +42219,44 @@ "Bearer Auth": [] } ], - "description": "Returns the MCP gateways from the vendor for the workspace's configured org/project.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ExecStreamResumeRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute/stream/start": { + "post": { + "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": [ - "mcp_vendors" + "sandboxes" ], - "summary": "List MCP servers for a vendor", + "summary": "Start a streamed sandbox command", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { "type": "string" } - }, - { - "description": "Max items to return (default 100)", - "name": "limit", - "in": "query", - "schema": { - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Number of items to skip (default 0)", - "name": "offset", - "in": "query", - "schema": { - "type": "integer", - "title": "Offset" - } } ], "responses": { "200": { - "description": "OK", + "description": "SSE event stream", "content": { - "application/json": { + "text/event-stream": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListMcpGatewaysResponse" + "type": "string" } } } @@ -40661,56 +42266,52 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "502": { - "description": "Bad Gateway", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - } - }, - "/v1/platform/mcp-vendors/{vendor_slug}/settings": { - "get": { + }, "security": [ { "API Key": [] @@ -40722,15 +42323,30 @@ "Bearer Auth": [] } ], - "description": "Returns the current vendor-specific settings.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.ExecStreamRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/execute/ws": { + "get": { + "description": "Open a WebSocket connection for streaming command execution inside a sandbox.", "tags": [ - "mcp_vendors" + "sandboxes" ], - "summary": "Get vendor settings", + "summary": "Execute a sandbox command over WebSocket", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -40739,49 +42355,50 @@ } ], "responses": { - "200": { - "description": "OK", + "101": { + "description": "WebSocket upgrade" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - }, - "put": { + }, "security": [ { "API Key": [] @@ -40793,15 +42410,20 @@ "Bearer Auth": [] } ], - "description": "Replaces vendor settings.", + "x-public": true + } + }, + "/api/v2/sandboxes/{sandbox_id}/glob": { + "post": { + "description": "Find files under a root path matching a glob pattern (supports **). Entries are returned in lexical order by path.", "tags": [ - "mcp_vendors" + "sandboxes" ], - "summary": "Replace vendor settings", + "summary": "Glob a sandbox filesystem", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -40815,7 +42437,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/sandboxes.GlobResponse" } } } @@ -40825,54 +42447,42 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" - } - } - } - } - }, - "post": { "security": [ { "API Key": [] @@ -40884,15 +42494,30 @@ "Bearer Auth": [] } ], - "description": "Initializes vendor settings.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.GlobRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/grep": { + "post": { + "description": "Search files under a root path for a literal text pattern (not a regex).", "tags": [ - "mcp_vendors" + "sandboxes" ], - "summary": "Create vendor settings", + "summary": "Grep a sandbox filesystem", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -40901,12 +42526,12 @@ } ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/sandboxes.GrepResponse" } } } @@ -40916,17 +42541,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -40936,7 +42551,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -40946,34 +42561,22 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "409": { - "description": "Conflict", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsRequest" - } - } - } - } - }, - "delete": { "security": [ { "API Key": [] @@ -40985,68 +42588,90 @@ "Bearer Auth": [] } ], - "description": "Removes vendor settings.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/sandboxes.GrepRequest" + } + } + } + } + } + }, + "/api/v2/sandboxes/{sandbox_id}/tunnel": { + "get": { + "description": "Open a WebSocket tunnel to a specific port inside a sandbox.", "tags": [ - "mcp_vendors" + "sandboxes" ], - "summary": "Delete vendor settings", + "summary": "Open a sandbox TCP tunnel", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "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", + "101": { + "description": "WebSocket upgrade" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeSettingsResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } } - } - } - }, - "/v1/platform/mcp-vendors/{vendor_slug}/tools": { - "get": { + }, "security": [ { "API Key": [] @@ -41058,15 +42683,20 @@ "Bearer Auth": [] } ], - "description": "Returns the tool catalog for this vendor.", + "x-public": true + } + }, + "/api/v2/sandboxes/{sandbox_id}/upload": { + "post": { + "description": "Upload a file to a sandbox filesystem path.", "tags": [ - "mcp_vendors" + "sandboxes" ], - "summary": "List tools for a vendor", + "summary": "Upload a sandbox file", "parameters": [ { - "description": "Vendor slug (e.g. arcade)", - "name": "vendor_slug", + "description": "Sandbox ID or name", + "name": "sandbox_id", "in": "path", "required": true, "schema": { @@ -41074,21 +42704,13 @@ } }, { - "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", + "description": "Destination file path", + "name": "path", "in": "query", + "required": true, "schema": { - "type": "integer", - "title": "Offset" + "type": "string", + "title": "Path" } } ], @@ -41098,17 +42720,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ListVendorToolsResponse" + "$ref": "#/components/schemas/sandboxes.UploadResponse" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -41118,7 +42740,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" + "$ref": "#/components/schemas/sandboxes.ErrorResponse" } } } @@ -41128,441 +42750,410 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/mcp_vendors.ErrorResponse" - } - } - } - } - } - } - }, - "/v1/platform/nps/response": { - "post": { - "security": [ - { - "Bearer Auth": [] - } - ], - "description": "Records the authenticated user's NPS score and optional comment.", - "tags": [ - "nps" - ], - "summary": "Submit an NPS response", - "parameters": [], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "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" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/nps.SubmitResponseRequest" - } - } - } - }, - "x-hidden": true - } - }, - "/v1/platform/ops/backfills/restart": { - "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "string", + "format": "binary", + "description": "File to upload" + } + }, + "required": [ + "file" + ] + } + } + } + } + } + }, + "/api/v2/threads/query": { + "post": { + "description": "Query threads within a project (session), with cursor-based pagination.\nReturns threads matching the given time range and optional filters.\n\nWhen `ai_search` is set, `Accept: text/event-stream` is required; requests without it return 406. AI search is unavailable on deployments that route queries to the v1 backend and returns 501 there.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "backfills" + "threads" + ], + "summary": "Query Threads", + "parameters": [ + { + "description": "application/json, or text/event-stream (required when ai_search is set)", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } + } ], - "summary": "Restart a backfill job", - "parameters": [], "responses": { "200": { - "description": "Backfill restarted", + "description": "items and pagination", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/threads.QueryThreadsResponseBody" + } + }, + "text/event-stream": { + "schema": { + "$ref": "#/components/schemas/shared.SSEEvent" } } } }, "400": { - "description": "Bad request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "missing or invalid authentication", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Backfill not found", + "description": "session not found", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "406": { + "description": "not acceptable (ai_search requires Accept: text/event-stream)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/backfills.restartBackfillRequest" + }, + "422": { + "description": "unprocessable entity (e.g. invalid project UUID)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } } } - } - } - } - }, - "/v1/platform/orgs/current/access-policies": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "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", + "500": { + "description": "internal server error", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/authz_internal.ListAccessPoliciesResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden", + "501": { + "description": "V2 filter syntax, thread_filters, or ai_search are unavailable for this deployment; use legacy function-style filters without thread_filters or set SMITHDB_QUERY_ENABLED=true", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "503": { + "description": "service unavailable", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "504": { + "description": "gateway timeout or deadline exceeded", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "parameters": [] - }, - "post": { "security": [ { - "API Key": [] - }, - { - "Organization ID": [] + "API Key": [], + "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Creates a new access policy.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/threads.QueryThreadsRequestBody" + } + } + } + } + } + }, + "/api/v2/threads/stats": { + "post": { + "description": "GET with body payload — no resources created. Returns aggregate statistics for threads in a tracing project.\nThe response includes the thread counts, run counts, latency percentiles, rates, token totals, and cost totals requested in `select`.\n\nSelf-hosted deployments require LangSmith `v0.17` or later.", "tags": [ - "access_policies" + "threads" ], - "summary": "Create an access policy", + "summary": "Query Thread Stats", "parameters": [], "responses": { - "201": { - "description": "Access policy created", + "200": { + "description": "aggregate thread statistics", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.AccessPolicyCreateResponse" + "$ref": "#/components/schemas/threads.QueryThreadStatsResponseBody" } } } }, "400": { - "description": "Bad request", + "description": "bad request (malformed JSON or invalid parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Role not found", + "description": "session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "422": { + "description": "unprocessable entity (e.g. invalid project UUID)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "SmithDB query is unavailable for this deployment", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.CreateAccessPolicyPayload" + "$ref": "#/components/schemas/threads.QueryThreadStatsRequestBody" } } } } } }, - "/v1/platform/orgs/current/access-policies/roles/{role_id}/access-policies": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Organization 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.", + "/api/v2/threads/{thread_id}/share": { + "get": { + "description": "Returns the share token for a thread. The token is omitted when\nthe thread is not shared. Gated on runs:share so the control's\nstate matches the control's permission.", "tags": [ - "access_policies" + "threads" ], - "summary": "Attach access policies to a role", + "summary": "Read a thread's share state", "parameters": [ { - "description": "Role ID", - "name": "role_id", + "description": "Thread ID", + "name": "thread_id", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Project UUID", + "name": "project_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project Id" + } } ], "responses": { - "204": { - "description": "Access policies attached successfully" - }, - "400": { - "description": "Bad request", + "200": { + "description": "share_token is omitted when the thread is not shared", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/threadshare.ShareTokenResponseBody" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Role not found", + "401": { + "description": "Unauthorized", "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", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/authz_internal.AttachAccessPoliciesPayload" - } - } - } - } - } - }, - "/v1/platform/orgs/current/access-policies/{access_policy_id}": { - "get": { "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Gets a specific access policy by ID.", + "x-public": true + }, + "post": { + "description": "Mints a public share token for a thread. Idempotent: sharing an\nalready-shared thread returns the existing token.", "tags": [ - "access_policies" + "threads" ], - "summary": "Get an access policy", + "summary": "Share a thread", "parameters": [ { - "description": "Access Policy ID", - "name": "access_policy_id", + "description": "Thread ID", + "name": "thread_id", "in": "path", "required": true, "schema": { @@ -41572,21 +43163,31 @@ ], "responses": { "200": { - "description": "Access policy details", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/authz_internal.AccessPolicy" + "$ref": "#/components/schemas/threadshare.ShareTokenResponseBody" } } } }, "400": { - "description": "Bad request", + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } @@ -41596,823 +43197,1156 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Access policy not found", + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - }, - "delete": { + }, "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Deletes a specific access policy by ID.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/threadshare.CreateShareTokenRequestBody" + } + } + } + } + }, + "delete": { + "description": "Deletes the share token for a thread. Idempotent: returns 204\nwhether or not a share token existed. Deliberately does not\nverify the thread still exists.", "tags": [ - "access_policies" + "threads" ], - "summary": "Delete an access policy", + "summary": "Unshare a thread", "parameters": [ { - "description": "Access Policy ID", - "name": "access_policy_id", + "description": "Thread ID", + "name": "thread_id", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "description": "Project UUID", + "name": "project_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project Id" + } } ], "responses": { "204": { - "description": "Access policy deleted 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" } } } }, - "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", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/abac.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - } - }, - "/v1/platform/orgs/current/info": { - "get": { + }, "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns organization info for the authenticated user's current organization.", + "x-public": true + } + }, + "/api/v2/threads/{thread_id}/stats": { + "get": { + "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": [ - "Organizations" + "threads" + ], + "summary": "Query Single Thread Stats", + "parameters": [ + { + "description": "Thread ID", + "name": "thread_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "`filter` narrows which of the thread's traces are aggregated, using a LangSmith filter expression. For example: lt(start_time, \"2025-01-01T00:00:00Z\") or eq(trace_id, \"0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "name": "filter", + "in": "query", + "schema": { + "type": "string", + "title": "Filter" + } + }, + { + "example": [ + "TURNS", + "LATENCY_P50" + ], + "description": "`selects` lists which aggregate stats to compute and return (repeatable query parameter). At least one value is required. Accepts any value of `SingleThreadStatsSelectField`.", + "name": "selects", + "in": "query", + "required": true, + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "enum": [ + "TURNS", + "FIRST_START_TIME", + "LAST_START_TIME", + "LAST_END_TIME", + "LATENCY_P50", + "LATENCY_P99", + "PROMPT_TOKENS", + "PROMPT_COST", + "COMPLETION_TOKENS", + "COMPLETION_COST", + "TOTAL_TOKENS", + "TOTAL_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "FEEDBACK_STATS" + ], + "type": "string" + }, + "title": "Selects" + } + }, + { + "description": "`session_id` is the tracing project (session) UUID (required).", + "name": "session_id", + "in": "query", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Session Id" + } + } ], - "summary": "Get current organization info", "responses": { "200": { - "description": "Organization info", + "description": "aggregate stats for the thread", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/orgs.OrganizationInfo" + "$ref": "#/components/schemas/threads.QuerySingleThreadStatsResponseBody" } } } }, "400": { - "description": "Invalid organization ID", + "description": "bad request (missing or invalid query parameters)", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "forbidden (insufficient permission)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "session not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid project UUID)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "internal server error", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "503": { + "description": "service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "parameters": [] - } - }, - "/v1/platform/orgs/current/members": { - "get": { "security": [ { - "API Key": [] - }, - { - "Organization ID": [] + "API Key": [], + "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Returns a paginated list of org members (active and pending) enriched with workspace memberships.", + "x-public": true + } + }, + "/api/v2/threads/{thread_id}/traces": { + "get": { + "description": "Retrieve all traces belonging to a specific thread within a project.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "orgs" + "threads" ], - "summary": "List org members with workspace roles", + "summary": "Query Thread Traces", "parameters": [ { - "description": "Page size (default 50, max 500)", - "name": "limit", + "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": "integer", - "title": "Limit" + "type": "string", + "title": "Cursor" } }, { - "description": "Page offset (default 0)", - "name": "offset", + "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": "integer", - "title": "Offset" + "type": "string", + "title": "Filter" } }, { - "description": "Filter: true = only active members; false = only pending members", - "name": "active_is", + "example": 20, + "description": "`page_size` is the maximum number of traces to return in this response. Defaults to 20 when omitted; must be between 1 and 100 inclusive when set.", + "name": "page_size", "in": "query", "schema": { - "type": "boolean", - "title": "Active Is" + "maximum": 100, + "minimum": 1, + "type": "integer", + "default": 20, + "title": "Page Size" } }, { - "description": "Filter: true = only pending members; false = only active members", - "name": "pending_is", + "description": "`project_id` is the tracing project UUID (required).", + "name": "project_id", "in": "query", + "required": true, "schema": { - "type": "boolean", - "title": "Pending Is" + "type": "string", + "format": "uuid", + "title": "Project Id" } }, { - "description": "Glob filter on display name; use * as wildcard (repeatable, matches any)", - "name": "name_like", + "example": [ + "NAME", + "START_TIME" + ], + "description": "`selects` lists which properties to include on each returned trace (repeatable query parameter). Accepts any value of the `ThreadTraceSelectField` enum. Properties not listed are omitted from each trace object; `trace_id` is always returned.", + "name": "selects", "in": "query", "style": "form", "explode": true, "schema": { + "type": "array", "items": { + "enum": [ + "THREAD_ID", + "TRACE_ID", + "OP", + "PROMPT_TOKENS", + "COMPLETION_TOKENS", + "TOTAL_TOKENS", + "START_TIME", + "END_TIME", + "LATENCY", + "FIRST_TOKEN_TIME", + "INPUTS_PREVIEW", + "OUTPUTS_PREVIEW", + "INPUTS", + "OUTPUTS", + "ERROR", + "PROMPT_COST", + "COMPLETION_COST", + "TOTAL_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "NAME", + "ERROR_PREVIEW", + "TURN_NUMBER" + ], "type": "string" }, - "type": "array", - "title": "Name Like" + "title": "Selects" } }, { - "description": "Glob filter on email; use * as wildcard (repeatable, matches any)", - "name": "email_like", + "description": "`trace_filter` narrows traces by applying a LangSmith filter expression to each trace's root run.", + "name": "trace_filter", "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" + "type": "string", + "title": "Trace Filter" } }, { - "description": "Glob filter on workspace role name; use * as wildcard (repeatable, matches any)", - "name": "workspace_role_like", + "description": "`tree_filter` narrows traces to those containing at least one run that matches the LangSmith filter expression.", + "name": "tree_filter", "in": "query", - "style": "form", - "explode": true, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Workspace Role Like" + "type": "string", + "title": "Tree Filter" } } ], "responses": { "200": { - "description": "Org members", - "headers": { - "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" - } - } - }, + "description": "items and pagination", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/orgs.OrgMemberEnriched" - } + "$ref": "#/components/schemas/threads.QueryThreadTracesResponseBody" } } } }, "400": { - "description": "Bad request", + "description": "bad request (missing or invalid query parameters)", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "403": { + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - } - } - }, - "/v1/platform/orgs/current/scim/tokens": { - "get": { - "security": [ - { - "API Key": [] }, - { - "Organization ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "List all SCIM bearer tokens for the current organization. The full token values are not returned.", - "tags": [ - "SCIM Tokens" - ], - "summary": "List SCIM tokens", - "responses": { - "200": { - "description": "List of SCIM tokens", + "404": { + "description": "session not found", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" - } + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "401": { - "description": "Unauthorized", + "422": { + "description": "unprocessable entity (e.g. invalid project UUID)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden - requires OrganizationRead permission", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "501": { + "description": "V2 filter syntax or TURN_NUMBER is unavailable for this deployment", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "503": { - "description": "Service unavailable", + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, - "parameters": [] - }, - "post": { "security": [ { - "API Key": [] - }, - { - "Organization ID": [] + "API Key": [], + "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Create a new SCIM bearer token for the current organization. The full token value is only returned once upon creation.", + "x-public": true + } + }, + "/api/v2/traces/query": { + "post": { + "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\nWhen `ai_search` is set, `Accept: text/event-stream` is required; requests without it return 406. AI search is unavailable on deployments that route queries to the v1 backend and returns 501 there.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", "tags": [ - "SCIM Tokens" + "runs" + ], + "summary": "Query traces", + "parameters": [ + { + "description": "application/json, or text/event-stream (required when ai_search is set)", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } + }, + { + "description": "application/json (required for JSON body)", + "name": "Content-Type", + "in": "header", + "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/query.QueryTracesResponseBody" + } + }, + "text/event-stream": { + "schema": { + "$ref": "#/components/schemas/shared.SSEEvent" + } + } + } + }, + "400": { + "description": "bad request (malformed JSON or invalid parameters)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "401": { - "description": "Unauthorized", + "description": "missing or invalid authentication", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden - requires OrganizationManage permission", + "description": "forbidden (insufficient permission)", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "404": { + "description": "session not found", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "406": { + "description": "not acceptable (ai_search requires Accept: text/event-stream)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "500": { - "description": "Internal server error", + "description": "internal server error", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "501": { + "description": "V2 filter syntax or ai_search is unavailable for this deployment; use legacy function-style filters or set SMITHDB_QUERY_ENABLED=true", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "503": { - "description": "Service unavailable", + "description": "service unavailable", "content": { - "application/json": { + "application/problem+json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "504": { + "description": "gateway timeout or deadline exceeded", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } }, + "security": [ + { + "API Key": [], + "Tenant ID": [] + }, + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.CreateScimTokenPayload" + "$ref": "#/components/schemas/query.QueryTracesRequestBody" } } } } } }, - "/v1/platform/orgs/current/scim/tokens/{scim_token_id}": { + "/api/v2/traces/{trace_id}/runs": { "get": { - "security": [ + "description": "Returns runs for a trace ID within min/max start time. Optional `filter`; repeatable `selects` to select fields to return.\n\nSelf-hosted deployments require LangSmith `v0.16` or later.", + "tags": [ + "runs" + ], + "summary": "List runs in a trace", + "parameters": [ { - "API Key": [] + "description": "application/json", + "name": "Accept", + "in": "header", + "schema": { + "type": "string" + } }, { - "Organization ID": [] + "description": "Trace UUID", + "name": "trace_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } }, { - "Bearer Auth": [] - } - ], - "description": "Retrieve a specific SCIM token by ID for the current organization. The full token value is not returned.", - "tags": [ - "SCIM Tokens" - ], - "summary": "Get a SCIM token", - "parameters": [ + "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": "SCIM Token ID", - "name": "scim_token_id", - "in": "path", + "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" + } + }, + { + "description": "`project_id` is the UUID of the tracing project that owns the trace.", + "name": "project_id", + "in": "query", "required": true, "schema": { - "type": "string" + "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": { + "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", + "LS_USER_ID" + ], + "type": "string" + }, + "title": "Selects" } } ], "responses": { "200": { - "description": "SCIM token details", + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" + "$ref": "#/components/schemas/query.QueryTraceResponseBody" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "bad request (missing or invalid query parameters)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden - requires OrganizationRead permission", + "401": { + "description": "missing or invalid authentication", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Token not found", + "403": { + "description": "forbidden (insufficient permission)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "500": { - "description": "Internal server error", + "404": { + "description": "session not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "503": { - "description": "Service unavailable", + "422": { + "description": "unprocessable entity (e.g. invalid UUID)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } - } - } - }, - "delete": { - "security": [ - { - "API Key": [] - }, - { - "Organization ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Delete a SCIM bearer token from the current organization.", - "tags": [ - "SCIM Tokens" - ], - "summary": "Delete a SCIM token", - "parameters": [ - { - "description": "SCIM Token ID", - "name": "scim_token_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "No content - token deleted successfully" }, - "401": { - "description": "Unauthorized", + "500": { + "description": "internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "403": { - "description": "Forbidden - requires OrganizationManage permission", + "501": { + "description": "V2 filter syntax is unavailable for this deployment; use legacy function-style filters or set SMITHDB_QUERY_ENABLED=true", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, - "404": { - "description": "Token not found", + "503": { + "description": "service unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.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/scim.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } + } + }, + "security": [ + { + "API Key": [], + "Tenant ID": [] }, - "503": { - "description": "Service unavailable", + { + "Bearer Auth": [], + "Tenant ID": [] + } + ], + "x-public": true + } + }, + "/auth/public": { + "get": { + "description": "Returns public authentication information for the current workspace-level session.", + "tags": [ + "auth" + ], + "summary": "Get public auth info", + "responses": { + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "$ref": "#/components/schemas/authn.PublicAuthInfo" } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] }, { - "Organization ID": [] + "Tenant ID": [] }, { "Bearer Auth": [] } ], - "description": "Update the description of an existing SCIM token for the current organization.", + "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": [ - "SCIM Tokens" + "aws_marketplace" ], - "summary": "Update a SCIM token", + "summary": "AWS Marketplace fulfillment URL registration", + "parameters": [], + "responses": { + "303": { + "description": "Redirect to thank-you page" + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + } + }, + "x-public": true, + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "x-amzn-marketplace-token": { + "type": "string", + "description": "Registration token from AWS Marketplace" + } + }, + "required": [ + "x-amzn-marketplace-token" + ] + } + } + } + } + } + }, + "/datasets/{dataset_id}/experiment-view-overrides": { + "get": { + "description": "Retrieves all experiment view override configurations for a specific dataset.\nThis endpoint returns column display overrides including color gradients,\nprecision settings, and column visibility configurations that customize how\nexperiment results are displayed in the UI.\n\nThe response includes all column overrides with their display settings:\n- Column identifiers (must start with inputs, outputs, reference_outputs, feedback, metrics, attachments, or metadata)\n- Color gradients for numeric data visualization\n- Precision settings for numeric columns (1-6 decimal places)\n- Hide flags to control column visibility", + "tags": [ + "experiment-view-overrides" + ], + "summary": "Get experiment view override configurations for a dataset", "parameters": [ { - "description": "SCIM Token ID", - "name": "scim_token_id", + "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": "Updated SCIM token details", + "description": "Successfully retrieved experiment view override configurations", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ScimTokenResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" + } } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Invalid dataset ID format\" example({\"error\":\"invalid dataset ID format\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden - requires OrganizationManage permission", + "401": { + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "Token not found", + "description": "Dataset not found or not accessible\" example({\"error\":\"dataset not found or not accessible\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/scim.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/scim.ErrorResponse" - } - } - } - }, - "503": { - "description": "Service unavailable", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/scim.UpdateScimTokenPayload" - } - } - } - } - } - }, - "/v1/platform/sessions/{sessionID}/agent-versions": { - "get": { "security": [ { "API Key": [] @@ -42424,38 +44358,40 @@ "Bearer Auth": [] } ], - "description": "Returns all agent versions (commit SHAs) seen in the given tracing project, ordered by first_seen_at descending.", + "x-public": true + }, + "post": { + "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": [ - "sessions" + "experiment-view-overrides" ], - "summary": "List agent versions for a project", + "summary": "Create new experiment view override configuration for a dataset", "parameters": [ { - "description": "Tracing project (session) UUID", - "name": "sessionID", + "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": "Agent versions", + "201": { + "description": "Successfully created experiment view override", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tracer_sessions.AgentVersionResponse" - } + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" } } } }, "400": { - "description": "Invalid session ID", + "description": "Invalid request data\" example({\"error\":\"column_overrides field is required\"})", "content": { "application/json": { "schema": { @@ -42468,7 +44404,7 @@ } }, "401": { - "description": "Unauthorized", + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { @@ -42479,103 +44415,60 @@ } } } - } - } - } - }, - "/v1/platform/sessions/{session_id}/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 the issues agent config attached to the given tracer session.", - "tags": [ - "issues-agent" - ], - "summary": "[Beta] Get the issues agent config for a session", - "parameters": [ - { - "description": "Tracer session ID (UUID)", - "name": "session_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "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", + "404": { + "description": "Dataset not found\" example({\"error\":\"dataset not found or not accessible\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "409": { + "description": "Override already exists\" example({\"error\":\"experiment view override already exists\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "404": { - "description": "Not Found", + "422": { + "description": "Validation error\" example({\"error\":\"column name at index 0 must start with one of: inputs, outputs, reference_outputs, feedback, metrics, attachments, metadata\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.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/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } - } - }, - "post": { + }, "security": [ { "API Key": [] @@ -42587,96 +44480,114 @@ "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.", + "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": { + "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": [ - "issues-agent" + "experiment-view-overrides" ], - "summary": "[Beta] Create the issues agent for a session", + "summary": "Get experiment view override configuration by specific ID", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "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": { - "201": { - "description": "Created", + "200": { + "description": "Successfully retrieved experiment view override configuration", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + "$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/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "409": { - "description": "Conflict", + "404": { + "description": "Override not found\" example({\"error\":\"experiment view override not found\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.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/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.CreateIssuesAgentRequest" - } - } - } - } - }, - "delete": { "security": [ { "API Key": [] @@ -42688,79 +44599,95 @@ "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.", + "x-public": true + }, + "delete": { + "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": [ - "issues-agent" + "experiment-view-overrides" ], - "summary": "[Beta] Delete the issues agent for a session", + "summary": "Delete experiment view override configuration", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "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": { "204": { - "description": "No Content" + "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/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.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/tracer_session_issues_agent.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/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] @@ -42772,98 +44699,115 @@ "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.", + "x-public": true + }, + "patch": { + "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": [ - "issues-agent" + "experiment-view-overrides" ], - "summary": "[Beta] Update the issues agent config for a session", + "summary": "Update existing experiment view override configuration", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "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": { "200": { - "description": "OK", + "description": "Successfully updated experiment view override", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.IssuesAgent" + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverride" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid request data\" example({\"error\":\"invalid experiment view override ID format\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "401": { - "description": "Unauthorized", + "description": "Unauthorized access\" example({\"error\":\"Unauthorized\"})", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.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/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "404": { - "description": "Not Found", + "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/tracer_session_issues_agent.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/tracer_session_issues_agent.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.UpdateIssuesAgentRequest" - } - } - } - } - } - }, - "/v1/platform/sessions/{session_id}/issues-agent/overview": { - "patch": { "security": [ { "API Key": [] @@ -42875,15 +44819,30 @@ "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.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/experiment_view_overrides.ExperimentViewOverridePatchRequest" + } + } + } + } + } + }, + "/me/providers/{providerType}": { + "get": { + "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": [ - "issues-agent" + "me" ], - "summary": "[Beta] Save the agent overview for a session", + "summary": "Get the authenticated user's provider user ID", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", + "description": "Provider type (e.g. slack, github)", + "name": "providerType", "in": "path", "required": true, "schema": { @@ -42897,7 +44856,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.SaveOverviewResponse" + "type": "string" } } } @@ -42907,7 +44866,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "string" } } } @@ -42917,27 +44876,7 @@ "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" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "string" } } } @@ -42947,26 +44886,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent.ErrorResponse" + "type": "string" } } } } }, - "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": { - "post": { "security": [ { "API Key": [] @@ -42978,112 +44903,92 @@ "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.", + "x-public": true + } + }, + "/oauth/authorize": { + "get": { + "description": "Validates authorization request parameters and redirects to the frontend consent page per RFC 6749.", "tags": [ - "issues-agent" + "oauth" ], - "summary": "Roll an issues agent webhook signing secret", + "summary": "Initiate OAuth2 authorization", "parameters": [ { - "description": "Tracer session ID (UUID)", - "name": "session_id", - "in": "path", + "description": "Must be 'code'", + "name": "response_type", + "in": "query", "required": true, "schema": { - "type": "string" + "type": "string", + "title": "Response Type" } }, { - "description": "Webhook ID (UUID)", - "name": "id", - "in": "path", + "description": "OAuth2 client ID", + "name": "client_id", + "in": "query", "required": true, "schema": { - "type": "string" + "type": "string", + "title": "Client Id" + } + }, + { + "description": "Redirect URI registered with the client", + "name": "redirect_uri", + "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" + } + }, + { + "description": "Opaque state value to prevent CSRF", + "name": "state", + "in": "query", + "schema": { + "type": "string", + "title": "State" } } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tracer_session_issues_agent_webhooks.IssuesAgentWebhook" - } - } - } + "302": { + "description": "Found" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } - } - } - }, - "/v1/platform/sessions/{session_id}/issues/views": { - "get": { + }, "security": [ { "API Key": [] @@ -43095,29 +45000,27 @@ "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.", + "x-public": true + } + }, + "/oauth/authorize/approve": { + "post": { + "description": "Issues an authorization code after the authenticated user approves the request. Called by the frontend consent page. Requires authentication.", "tags": [ - "issues" - ], - "summary": "[Beta] List viewed issues for a session", - "parameters": [ - { - "description": "Session ID (UUID)", - "name": "session_id", - "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/tracer_session_issues.ListViewsResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -43127,7 +45030,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -43137,7 +45040,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -43147,7 +45050,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -43157,16 +45060,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tracer_session_issues.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } - } - } - }, - "/v1/platform/tools": { - "get": { + }, "security": [ { "API Key": [] @@ -43178,37 +45077,71 @@ "Bearer Auth": [] } ], - "description": "Returns a paginated list of tools in the workspace.", + "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" + ] + } + } + } + } + } + }, + "/oauth/client/{clientID}": { + "get": { + "description": "Returns the display metadata (name, logo, homepage/terms/privacy links) for a registered OAuth2 client. Used by the consent screen to show a human-readable client identity instead of the raw client_id. Public endpoint; exposes only non-sensitive display fields.", "tags": [ - "tools" + "oauth" ], - "summary": "List tools", + "summary": "Get public OAuth2 client metadata", "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": "OAuth2 client ID", + "name": "clientID", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Query" + "type": "string" } } ], @@ -43218,7 +45151,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ListToolsResponse" + "$ref": "#/components/schemas/oauth.ClientPublicMetadata" } } } @@ -43228,68 +45161,43 @@ "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" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } - } - }, + }, + "x-public": true + } + }, + "/oauth/device/authorize": { "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Creates a new tool in the workspace.", + "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": [ - "tools" + "oauth" ], - "summary": "Create a tool", + "summary": "Authorize a device code", "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -43299,7 +45207,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -43309,7 +45217,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -43319,46 +45227,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.CreateToolPayload" - } - } - } - } - } - }, - "/v1/platform/tools/id/{id}": { - "get": { "security": [ { "API Key": [] @@ -43370,29 +45244,52 @@ "Bearer Auth": [] } ], - "description": "Returns a tool identified by its UUID.", - "tags": [ - "tools" - ], - "summary": "Get a tool by ID", - "parameters": [ - { - "description": "Tool UUID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "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" + }, + "user_code": { + "type": "string", + "description": "User code displayed on the device" + } + }, + "required": [ + "organization_id", + "user_code" + ] + } } } + } + } + }, + "/oauth/device/code": { + "post": { + "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/tools.Tool" + "$ref": "#/components/schemas/oauth.DeviceCodeResponse" } } } @@ -43402,37 +45299,7 @@ "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" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -43442,14 +45309,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } - } - }, - "delete": { + }, "security": [ { "API Key": [] @@ -43461,62 +45326,63 @@ "Bearer Auth": [] } ], - "description": "Deletes a tool identified by its UUID.", - "tags": [ - "tools" - ], - "summary": "Delete a tool by ID", - "parameters": [ - { - "description": "Tool UUID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" + "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": { + "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": [ + "oauth" ], + "summary": "Register an OAuth2 dynamic client", + "parameters": [], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.ClientRegistrationResponse" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "404": { - "description": "Not Found", + "413": { + "description": "Request Entity Too Large", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } @@ -43526,14 +45392,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] @@ -43545,29 +45409,80 @@ "Bearer Auth": [] } ], - "description": "Updates an existing tool identified by its UUID.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/oauth.ClientRegistrationRequest" + } + } + } + } + } + }, + "/oauth/revoke": { + "post": { + "description": "Revokes an access token or refresh token per RFC 7009. Always returns 200 regardless of whether the token was found.", "tags": [ - "tools" + "oauth" ], - "summary": "Update a tool by ID", - "parameters": [ + "summary": "Revoke an OAuth2 token", + "parameters": [], + "responses": { + "200": { + "description": "OK" + } + }, + "security": [ { - "description": "Tool UUID", - "name": "id", - "in": "path", - "required": true, - "schema": { - "type": "string" + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "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": { + "description": "Token endpoint that dispatches by grant_type: authorization_code, urn:ietf:params:oauth:grant-type:device_code, or refresh_token.", + "tags": [ + "oauth" ], + "summary": "Exchange grant for OAuth2 tokens", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "$ref": "#/components/schemas/oauth.TokenResponse" } } } @@ -43577,110 +45492,189 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } }, - "401": { - "description": "Unauthorized", + "500": { + "description": "Internal Server Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } + } + }, + "security": [ + { + "API Key": [] }, - "403": { - "description": "Forbidden", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, + "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" + ] + } + } + } + } + } + }, + "/orgs/current/data-planes": { + "get": { + "description": "Returns up to 50 data planes owned by the caller's organization across all lifecycle states. Sorted by status priority (active first), then newest first. Requires BYOC to be enabled for the org.", + "tags": [ + "data_planes" + ], + "summary": "List data planes for the current organization", + "responses": { + "200": { + "description": "Data planes", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ListPublicDataPlanesResponse" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Invalid organization ID", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.UpdateToolPayload" + }, + "403": { + "description": "BYOC not enabled for this organization", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } } } } - } - } - }, - "/v1/platform/tools/{handle}": { - "get": { + }, "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Returns a tool identified by its handle.", + "x-public": true, + "parameters": [] + }, + "post": { + "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.\nThe cloud of the control plane selects the AWS, the Azure, or the GCP request. For AWS, the control plane uses the organization's assigned external ID to assume the AWS role. Configure that ID in the role's trust policy before creating a data plane. For Azure, the control plane uses the Entra tenant and the resource group in the request. For GCP, the control plane impersonates the provisioner service account in the request. That service account must be in the request's project, and its description must be the organization's assigned external ID.", "tags": [ - "tools" - ], - "summary": "Get a tool by handle", - "parameters": [ - { - "description": "Tool handle", - "name": "handle", - "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/tools.Tool" + "$ref": "#/components/schemas/data_planes.PublicDataPlane" } } } }, "400": { - "description": "Bad Request", + "description": "Invalid input", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } @@ -43690,172 +45684,185 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } }, "403": { - "description": "Forbidden", + "description": "BYOC not enabled or insufficient permissions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "409": { + "description": "Name already exists or the organization's external ID needs configuration", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.CreateErrorResponse" + } + } + } + }, + "422": { + "description": "Customer AWS resource conflict or quota exceeded", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.CreateErrorResponse" } } } }, "500": { - "description": "Internal Server Error", + "description": "Internal server error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } } - } - }, - "delete": { + }, "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Deletes a tool identified by its handle.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.CreateDataPlaneRequest" + } + } + } + } + } + }, + "/orgs/current/data-planes/{id}": { + "get": { + "description": "Returns a data plane and its saved provisioning settings in any lifecycle state. Requires BYOC and organization:infrastructure:read.", "tags": [ - "tools" + "data_planes" ], - "summary": "Delete a tool by handle", + "summary": "Get a data plane", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Data plane ID", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { - "204": { - "description": "No Content" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "Data plane", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.PublicDataPlane" } } } }, - "401": { - "description": "Unauthorized", + "400": { + "description": "Invalid data plane or organization ID", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "403": { - "description": "Forbidden", + "description": "BYOC not enabled or insufficient permissions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } }, "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", + "description": "Data plane not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "$ref": "#/components/schemas/shared.ProblemDetails" } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] } ], - "description": "Updates an existing tool identified by its handle.", + "x-public": true + }, + "delete": { + "description": "Verifies that the stored customer AWS role has delete permissions, that the stored Azure subscription is reachable, or that the stored GCP provisioner service account can be impersonated. Then removes linked workspaces and starts asynchronous deprovisioning for an active or provisioning_failed data plane owned by the caller's organization. Azure and GCP data planes can also be deleted while provisioning. Requires BYOC to be enabled for the org and organization:infrastructure:manage.", "tags": [ - "tools" + "data_planes" ], - "summary": "Update a tool by handle", + "summary": "Delete a data plane", "parameters": [ { - "description": "Tool handle", - "name": "handle", + "description": "Data plane ID", + "name": "id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], "responses": { - "200": { - "description": "OK", + "202": { + "description": "Data plane deprovisioning started", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.Tool" + "$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/tools.ErrorResponse" + "$ref": "#/components/schemas/data_planes.ErrorResponse" } } } @@ -43865,141 +45872,218 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "403": { - "description": "Forbidden", + "description": "BYOC not enabled or insufficient permissions", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, "404": { - "description": "Not Found", + "description": "Data plane not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "500": { - "description": "Internal Server Error", + "409": { + "description": "Data plane cannot be deleted from its current status", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/tools.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/tools.UpdateToolPayload" + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } } } } - } - } - }, - "/v2/sandboxes/boxes": { - "get": { + }, "security": [ { "API Key": [] }, { - "Tenant ID": [] + "Organization ID": [] }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "List sandboxes for the authenticated tenant, with optional filtering, sorting, and pagination.", + "x-public": true + }, + "patch": { + "description": "Update specific settings for a data plane owned by the caller's organization.", "tags": [ - "sandboxes" + "data_planes" ], - "summary": "List sandboxes", + "summary": "Update data plane settings", "parameters": [ { - "description": "Maximum number of results", - "name": "limit", - "in": "query", + "description": "Data plane ID", + "name": "id", + "in": "path", + "required": true, "schema": { - "default": 50, - "type": "integer", - "title": "Limit" + "type": "string", + "format": "uuid" + } + } + ], + "responses": { + "200": { + "description": "Updated data plane", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.PublicDataPlane" + } + } } }, - { - "description": "Pagination offset", - "name": "offset", - "in": "query", - "schema": { - "default": 0, - "type": "integer", - "title": "Offset" + "400": { + "description": "Invalid request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "403": { + "description": "BYOC not enabled or insufficient permissions", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } + } + }, + "409": { + "description": "Data plane is not ready or its status does not allow updates", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/shared.ProblemDetails" + } + } } + } + }, + "security": [ + { + "API Key": [] }, { - "description": "Filter by name substring", - "name": "name_contains", - "in": "query", + "Organization ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/data_planes.UpdateDataPlaneRequest" + } + } + } + } + } + }, + "/repos/{owner}/{repo}/tags/{tag_name}/history": { + "get": { + "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": [ + "tag-transitions" + ], + "summary": "Get tag transition history", + "parameters": [ + { + "description": "Repository owner (tenant handle)", + "name": "owner", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Name Contains" + "type": "string" } }, { - "description": "Filter by status (provisioning, ready, failed, stopped, deleting)", - "name": "status", - "in": "query", + "description": "Repository handle", + "name": "repo", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Status" + "type": "string" } }, { - "description": "Filter by creator identity. Only 'me' is supported.", - "name": "created_by", - "in": "query", + "description": "Tag name", + "name": "tag_name", + "in": "path", + "required": true, "schema": { - "type": "string", - "title": "Created By" + "type": "string" } }, { - "description": "Sort column (name, status, created_at)", - "name": "sort_by", + "name": "limit", "in": "query", "schema": { - "default": "created_at", - "type": "string", - "title": "Sort By" + "maximum": 100, + "minimum": 1, + "type": "integer", + "default": 50, + "title": "Limit" } }, { - "description": "Sort direction (asc, desc)", - "name": "sort_direction", + "name": "offset", "in": "query", "schema": { - "default": "desc", - "type": "string", - "title": "Sort Direction" + "minimum": 0, + "type": "integer", + "default": 0, + "title": "Offset" } } ], @@ -44009,7 +46093,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxListResponse" + "$ref": "#/components/schemas/tag_transitions.TagTransitionHistoryResponse" } } } @@ -44019,17 +46103,17 @@ "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" } } } @@ -44039,14 +46123,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tag_transitions.ErrorResponse" } } } } - } - }, - "post": { + }, "security": [ { "API Key": [] @@ -44056,103 +46138,120 @@ }, { "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 static blueprint.", + "x-public": true + } + }, + "/userinfo": { + "get": { + "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": [ - "sandboxes" + "oauth" ], - "summary": "Create a sandbox", - "parameters": [], + "summary": "Get OpenID Connect userinfo", "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" - } - } - } - }, - "400": { - "description": "Snapshot not found", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.UserinfoResponse" } } } }, - "409": { - "description": "Name already exists", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/oauth.TokenErrorResponse" } } } - }, - "422": { - "description": "Validation error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } + } + }, + "security": [ + { + "Bearer Auth": [] + } + ], + "x-public": true, + "parameters": [] + } + }, + "/v1/agent-builder/integrations": { + "get": { + "description": "Returns default policy, integration overrides, and known integrations for the current workspace.", + "tags": [ + "integrations" + ], + "summary": "Get Agent Builder integrations settings", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsPayload" + } + } } }, - "429": { - "description": "Quota exceeded", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "500": { - "description": "Sandbox creation failed or internal error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "504": { - "description": "Sandbox did not become ready in time", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.CreateSandboxPayload" + }, + "500": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } } } } - } - } - }, - "/v2/sandboxes/boxes/batch-delete": { - "post": { + }, "security": [ { "API Key": [] @@ -44164,11 +46263,15 @@ "Bearer Auth": [] } ], - "description": "Delete multiple sandboxes by name or UUID in a single request.", + "x-public": true, + "parameters": [] + }, + "put": { + "description": "Replaces default policy and integration overrides for the current workspace.", "tags": [ - "sandboxes" + "integrations" ], - "summary": "Batch delete sandboxes", + "summary": "Update Agent Builder integrations settings", "parameters": [], "responses": { "200": { @@ -44176,7 +46279,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.BatchDeleteResponse" + "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsPayload" } } } @@ -44186,17 +46289,23 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } }, - "403": { - "description": "Forbidden", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -44206,53 +46315,63 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, + "security": [ + { + "API Key": [] + }, + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.BatchDeleteRequest" + "$ref": "#/components/schemas/integrations.AgentBuilderIntegrationsUpdatePayload" } } } } } }, - "/v2/sandboxes/boxes/{name}": { + "/v1/fleet/orgs": { "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - }, - { - "X-Service-Key": [] - } - ], - "description": "Retrieve a sandbox by name. Stale provisioning sandboxes are auto-failed.", + "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": [ - "sandboxes" + "fleet orgs" ], - "summary": "Get a sandbox", + "summary": "List organizations", "parameters": [ { - "description": "Sandbox display name", - "name": "name", - "in": "path", - "required": true, + "description": "Items per page (default 20, max 20)", + "name": "page_size", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "title": "Page Size" + } + }, + { + "description": "Opaque pagination cursor returned by a prior response", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" } } ], @@ -44262,17 +46381,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/orgs.ListOrgsResponse" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } @@ -44282,54 +46411,87 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } } - } - }, - "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.", + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/orgs/{org_id}/tenants": { + "get": { + "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": [ - "sandboxes" + "fleet tenants" ], - "summary": "Delete a sandbox", + "summary": "List tenants", "parameters": [ { - "description": "Sandbox display name or UUID", - "name": "name", + "description": "Organization ID", + "name": "org_id", "in": "path", "required": true, "schema": { "type": "string" } + }, + { + "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": { - "204": { - "description": "No content" + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tenants.ListTenantsResponse" + } + } + } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tenants.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tenants.ErrorResponse" } } } @@ -44339,41 +46501,48 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/tenants.ErrorResponse" } } } } - } - }, - "patch": { + }, "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Update a sandbox's display name. The name must be unique within the tenant.", + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/secrets": { + "get": { + "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": [ - "sandboxes" + "fleet secrets" ], - "summary": "Update a sandbox", + "summary": "List workspace secret names", "parameters": [ { - "description": "Current sandbox display name", - "name": "name", - "in": "path", - "required": true, + "description": "Items per page (1-100, default 20)", + "name": "page_size", + "in": "query", "schema": { - "type": "string" + "type": "integer", + "title": "Page Size" + } + }, + { + "description": "Opaque pagination cursor from a prior response's next_cursor", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" } } ], @@ -44383,37 +46552,37 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/secrets.ListResponse" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "409": { - "description": "Name already exists", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "422": { - "description": "Validation error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } @@ -44423,26 +46592,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.UpdateSandboxPayload" - } - } - } - } - } - }, - "/v2/sandboxes/boxes/{name}/service-url": { - "post": { "security": [ { "API Key": [] @@ -44454,98 +46609,51 @@ "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.", + "x-public": true, + "x-hidden": true + }, + "post": { + "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": [ - "sandboxes" - ], - "summary": "Generate a service access token", - "parameters": [ - { - "description": "Sandbox display name", - "name": "name", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "fleet secrets" ], + "summary": "Bulk set or delete workspace secrets", + "parameters": [], "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ServiceURLResponse" - } - } - } + "204": { + "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "422": { - "description": "Unprocessable Entity", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "501": { - "description": "Not Implemented", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ServiceURLPayload" - } - } - } - } - } - }, - "/v2/sandboxes/boxes/{name}/snapshot": { - "post": { "security": [ { "API Key": [] @@ -44557,14 +46665,33 @@ "Bearer Auth": [] } ], - "description": "Create a snapshot by capturing the current state of a sandbox or promoting an existing checkpoint.", + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/secrets.bulkUpsertItem" + } + } + } + } + }, + "x-hidden": true + } + }, + "/v1/fleet/secrets/{name}": { + "put": { + "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": [ - "sandboxes" + "fleet secrets" ], - "summary": "Capture a snapshot from a sandbox", + "summary": "Set a workspace secret", "parameters": [ { - "description": "Sandbox display name", + "description": "Secret name (e.g. ANTHROPIC_API_KEY)", "name": "name", "in": "path", "required": true, @@ -44574,22 +46701,25 @@ } ], "responses": { - "201": { - "description": "Created", + "204": { + "description": "No Content" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "400": { - "description": "Bad Request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } @@ -44599,56 +46729,88 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } + } + }, + "security": [ + { + "API Key": [] }, - "404": { - "description": "Not Found", + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] + } + ], + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/secrets.putRequest" + } + } + } + }, + "x-hidden": true + }, + "delete": { + "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" + }, + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "422": { - "description": "Unprocessable Entity", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } }, - "500": { - "description": "Internal Server Error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/secrets.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.CaptureSnapshotPayload" - } - } - } - } - } - }, - "/v2/sandboxes/boxes/{name}/start": { - "post": { "security": [ { "API Key": [] @@ -44660,15 +46822,30 @@ "Bearer Auth": [] } ], - "description": "Start a stopped or failed sandbox. This endpoint is not idempotent.", + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/tenants/{tenant_id}/users/{id}": { + "get": { + "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": [ - "sandboxes" + "fleet users" ], - "summary": "Start a sandbox", + "summary": "Get Fleet user in tenant", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Tenant ID", + "name": "tenant_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "description": "User ID", + "name": "id", "in": "path", "required": true, "schema": { @@ -44677,12 +46854,12 @@ } ], "responses": { - "202": { - "description": "Accepted", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/users.UserRef" } } } @@ -44692,7 +46869,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/users.ErrorResponse" } } } @@ -44702,7 +46889,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } @@ -44712,7 +46899,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } @@ -44722,43 +46909,40 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } } - } - } - }, - "/v2/sandboxes/boxes/{name}/status": { - "get": { + }, "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Retrieve the lightweight status of a sandbox for polling.", + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/threads/{thread_id}/sandbox-activation": { + "post": { + "description": "Starts or resumes the sandbox referenced by the thread and returns when it is ready. The operation is idempotent. The thread must include sandbox.sandbox_slug.", "tags": [ - "sandboxes" + "fleet threads" ], - "summary": "Get sandbox status", + "summary": "Activate a thread sandbox", "parameters": [ { - "description": "Sandbox display name", - "name": "name", + "description": "Thread ID", + "name": "thread_id", "in": "path", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "uuid" } } ], @@ -44768,134 +46952,156 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxStatusResponse" + "$ref": "#/components/schemas/threads.SandboxRef" } } } }, - "404": { - "description": "Not Found", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/threads.SandboxActivationProblem" } } } }, - "500": { - "description": "Internal Server Error", + "403": { + "description": "Forbidden", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/threads.SandboxActivationProblem" } } } - } - } - } - }, - "/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", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "Sandbox stopped" }, - "400": { - "description": "Bad Request", + "404": { + "description": "Not Found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/threads.SandboxActivationProblem" } } } }, - "403": { - "description": "Forbidden", + "409": { + "description": "Conflict", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/threads.SandboxActivationProblem" } } } }, - "404": { - "description": "Not Found", + "501": { + "description": "Not Implemented", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/threads.SandboxActivationProblem" } } } + } + }, + "security": [ + { + "API Key": [] }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } + { + "Tenant ID": [] + }, + { + "Bearer Auth": [] } - } + ], + "x-public": true, + "x-hidden": true } }, - "/v2/sandboxes/internal/start/{name}": { - "post": { - "description": "Called by the sandbox-router to wake stopped sandboxes. Blocks until the sandbox is ready or times out. The name parameter accepts either the display name or route name (sb-).", + "/v1/fleet/usage/agents": { + "get": { + "description": "Returns the same agent cost report as the Fleet usage UI. Costs are estimates in USD from recorded traces, not invoice totals. Requires `fleet:read-admin-config`. Keep the time window and sorting unchanged across pages. Results are live: late traces or cost updates can move rows between pages; pagination does not provide a frozen snapshot.", "tags": [ - "sandboxes-internal" + "usage" ], - "summary": "Internal: start a stopped sandbox (service-to-service)", + "summary": "List Fleet agent costs", "parameters": [ { - "description": "Sandbox display name or route name (sb-)", - "name": "name", - "in": "path", + "description": "Items per page (1-100, default 20)", + "name": "page_size", + "in": "query", + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "default": 20, + "title": "Page Size" + } + }, + { + "description": "Opaque cursor from the previous response; omit for the first page", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + }, + { + "description": "Start of cost window (RFC 3339)", + "name": "start_time", + "in": "query", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "date-time", + "title": "Start Time" } }, { - "description": "Tenant ID", - "name": "X-Tenant-Id", - "in": "header", + "description": "End of cost window (RFC 3339)", + "name": "end_time", + "in": "query", "required": true, "schema": { - "type": "string" + "type": "string", + "format": "date-time", + "title": "End Time" + } + }, + { + "description": "Sort field", + "name": "sort_by", + "in": "query", + "schema": { + "enum": [ + "cost", + "runs", + "last_used", + "first_used" + ], + "type": "string", + "default": "cost", + "title": "Sort By" + } + }, + { + "description": "Sort direction", + "name": "sort_order", + "in": "query", + "schema": { + "enum": [ + "asc", + "desc" + ], + "type": "string", + "default": "desc", + "title": "Sort Order" } } ], @@ -44905,7 +47111,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SandboxResponse" + "$ref": "#/components/schemas/usage.AgentUsagePage" } } } @@ -44915,17 +47121,27 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } }, - "404": { - "description": "Not Found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } @@ -44935,99 +47151,106 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } } }, - "x-hidden": true - } - }, - "/v2/sandboxes/snapshots": { - "get": { "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "List sandbox snapshots for the authenticated tenant, with optional filtering, sorting, and pagination.", + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/usage/users": { + "get": { + "description": "Returns the same user cost report as the Fleet usage UI, grouped by recorded user email. Runs without a user email are omitted. Costs are estimates in USD from recorded traces, not invoice totals. Requires `fleet:read-admin-config`. Keep the time window and sorting unchanged across pages. Results are live: late traces or cost updates can move rows between pages; pagination does not provide a frozen snapshot.", "tags": [ - "sandboxes" + "usage" ], - "summary": "List snapshots", + "summary": "List Fleet user costs", "parameters": [ { - "description": "Maximum number of results", - "name": "limit", - "in": "query", - "schema": { - "default": 50, - "type": "integer", - "title": "Limit" - } - }, - { - "description": "Pagination offset", - "name": "offset", + "description": "Items per page (1-100, default 20)", + "name": "page_size", "in": "query", "schema": { - "default": 0, + "maximum": 100, + "minimum": 1, "type": "integer", - "title": "Offset" + "default": 20, + "title": "Page Size" } }, { - "description": "Filter by name substring", - "name": "name_contains", + "description": "Opaque cursor from the previous response; omit for the first page", + "name": "cursor", "in": "query", "schema": { "type": "string", - "title": "Name Contains" + "title": "Cursor" } }, { - "description": "Filter by status (building, ready, failed, deleting)", - "name": "status", + "description": "Start of cost window (RFC 3339)", + "name": "start_time", "in": "query", + "required": true, "schema": { "type": "string", - "title": "Status" + "format": "date-time", + "title": "Start Time" } }, { - "description": "Filter by creator identity. Only 'me' is supported.", - "name": "created_by", + "description": "End of cost window (RFC 3339)", + "name": "end_time", "in": "query", + "required": true, "schema": { "type": "string", - "title": "Created By" + "format": "date-time", + "title": "End Time" } }, { - "description": "Sort column (name, status, created_at)", + "description": "Sort field", "name": "sort_by", "in": "query", "schema": { - "default": "created_at", + "enum": [ + "cost", + "runs", + "agent_count", + "last_used", + "first_used" + ], "type": "string", + "default": "cost", "title": "Sort By" } }, { - "description": "Sort direction (asc, desc)", - "name": "sort_direction", + "description": "Sort direction", + "name": "sort_order", "in": "query", "schema": { - "default": "desc", + "enum": [ + "asc", + "desc" + ], "type": "string", - "title": "Sort Direction" + "default": "desc", + "title": "Sort Order" } } ], @@ -45037,7 +47260,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotListResponse" + "$ref": "#/components/schemas/usage.UserUsagePage" } } } @@ -45047,7 +47270,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } @@ -45057,7 +47290,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } @@ -45067,38 +47300,72 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/httperr.ErrorResponse" } } } } - } - }, - "post": { + }, "security": [ { - "API Key": [] - }, - { + "API Key": [], "Tenant ID": [] }, { - "Bearer Auth": [] + "Bearer Auth": [], + "Tenant ID": [] } ], - "description": "Create a snapshot from a Docker image (async build).", + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/users": { + "get": { + "description": "Lists members of the caller's current workspace, optionally filtered by a search string. Use this to resolve a colleague's email or full name into the user ID that agent sharing takes (`permissions.shared_users`). A member's `name` in the response can come from a separately configured display name, which `search` does not match. The tenant is taken from the X-Tenant-Id header. Members your organization hides from other members are omitted.", "tags": [ - "sandboxes" + "fleet users" + ], + "summary": "List Fleet users", + "parameters": [ + { + "description": "Case-insensitive substring matched against member email and full name. Omit to list every member.", + "name": "search", + "in": "query", + "schema": { + "type": "string", + "title": "Search" + } + }, + { + "description": "Items per page", + "name": "page_size", + "in": "query", + "schema": { + "maximum": 100, + "minimum": 1, + "type": "integer", + "default": 20, + "title": "Page Size" + } + }, + { + "description": "Opaque pagination cursor from a prior response's next_cursor", + "name": "cursor", + "in": "query", + "schema": { + "type": "string", + "title": "Cursor" + } + } ], - "summary": "Create a snapshot", - "parameters": [], "responses": { - "201": { - "description": "Created", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + "$ref": "#/components/schemas/users.ListResponse" } } } @@ -45108,7 +47375,17 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/users.ErrorResponse" } } } @@ -45118,7 +47395,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } @@ -45128,26 +47405,12 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } } }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.CreateSnapshotPayload" - } - } - } - } - } - }, - "/v2/sandboxes/snapshots/{snapshot_id}": { - "get": { "security": [ { "API Key": [] @@ -45159,49 +47422,34 @@ "Bearer Auth": [] } ], - "description": "Get a sandbox snapshot by ID.", + "x-public": true, + "x-hidden": true + } + }, + "/v1/fleet/users/current": { + "get": { + "description": "Returns the authenticated Fleet caller's user profile. This endpoint does not require X-Tenant-Id and is intended for Fleet bootstrap.", "tags": [ - "sandboxes" - ], - "summary": "Get a snapshot", - "parameters": [ - { - "description": "Snapshot UUID", - "name": "snapshot_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "fleet users" ], + "summary": "Get current Fleet user", "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" + "$ref": "#/components/schemas/users.User" } } } }, - "403": { - "description": "Forbidden", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } @@ -45211,7 +47459,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } @@ -45221,61 +47469,52 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/users.ErrorResponse" } } } } - } - }, - "delete": { + }, "security": [ { "API Key": [] }, - { - "Tenant ID": [] - }, { "Bearer Auth": [] } ], - "description": "Delete a snapshot by ID. The underlying storage is reclaimed asynchronously.", + "x-public": true, + "parameters": [], + "x-hidden": true + } + }, + "/workspaces/current/ttl-settings": { + "get": { + "description": "Get the longlived trace TTL settings for a workspace", "tags": [ - "sandboxes" - ], - "summary": "Delete a snapshot", - "parameters": [ - { - "description": "Snapshot UUID", - "name": "snapshot_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } + "TTL Settings" ], + "summary": "Get workspace TTL settings", "responses": { - "204": { - "description": "Snapshot deleted" - }, - "400": { - "description": "Bad Request", + "200": { + "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "$ref": "#/components/schemas/ttl_settings.TTLSettingsResponse" } } } }, - "403": { - "description": "Forbidden", + "400": { + "description": "Bad Request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -45285,7 +47524,10 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -45295,16 +47537,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } - } - } - }, - "/v2/sandboxes/usage": { - "get": { + }, "security": [ { "API Key": [] @@ -45314,23 +47555,51 @@ }, { "Bearer Auth": [] - }, - { - "X-Service-Key": [] } ], - "description": "Get current sandbox resource usage and quota limits for the workspace", + "x-public": true, + "parameters": [] + }, + "put": { + "description": "Update the longlived trace TTL for a workspace.", "tags": [ - "sandboxes" + "TTL Settings" ], - "summary": "Get sandbox resource usage", + "summary": "Update workspace TTL settings", + "parameters": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.UsageResponse" + "$ref": "#/components/schemas/ttl_settings.TTLSettingsResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } } @@ -45340,17 +47609,15 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } }, - "parameters": [] - } - }, - "/v2/sandboxes/{sandbox_id}/download": { - "get": { "security": [ { "API Key": [] @@ -45362,592 +47629,14 @@ "Bearer Auth": [] } ], - "description": "Download file contents from a sandbox filesystem path.", - "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" - } - } - ], - "responses": { - "200": { - "description": "File content" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - } - } - } - }, - "/v2/sandboxes/{sandbox_id}/execute": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Execute a command inside a sandbox and return stdout, stderr, and exit code.", - "tags": [ - "sandboxes" - ], - "summary": "Execute a sandbox command", - "parameters": [ - { - "description": "Sandbox ID or name", - "name": "sandbox_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ExecResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ExecRequest" - } - } - } - } - } - }, - "/v2/sandboxes/{sandbox_id}/execute/ws": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Open a WebSocket connection for streaming command execution inside a sandbox.", - "tags": [ - "sandboxes" - ], - "summary": "Execute a sandbox command over WebSocket", - "parameters": [ - { - "description": "Sandbox ID or name", - "name": "sandbox_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "101": { - "description": "WebSocket upgrade" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - } - } - } - }, - "/v2/sandboxes/{sandbox_id}/tunnel": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Open a WebSocket tunnel to a specific port inside a sandbox.", - "tags": [ - "sandboxes" - ], - "summary": "Open a sandbox TCP tunnel", - "parameters": [ - { - "description": "Sandbox ID or name", - "name": "sandbox_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "description": "Target sandbox TCP port", - "name": "X-Sandbox-Port", - "in": "header", - "schema": { - "type": "integer" - } - } - ], - "responses": { - "101": { - "description": "WebSocket upgrade" - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "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" - } - } - } - } - } - } - }, - "/v2/sandboxes/{sandbox_id}/upload": { - "post": { - "security": [ - { - "API Key": [] - }, - { - "Tenant 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" - } - }, - { - "description": "Destination file path", - "name": "path", - "in": "query", - "required": true, - "schema": { - "type": "string", - "title": "Path" - } - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.UploadResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - }, - "500": { - "description": "Internal Server Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/sandboxes.ErrorResponse" - } - } - } - } - }, - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "string", - "format": "binary", - "description": "File to upload" - } - }, - "required": [ - "file" - ] - } - } - } - } - } - }, - "/workspaces/current/ttl-settings": { - "get": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Get the longlived trace TTL settings for a workspace", - "tags": [ - "TTL Settings" - ], - "summary": "Get workspace TTL settings", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ttl_settings.TTLSettingsResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "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" - } - } - } - } - } - }, - "parameters": [] - }, - "put": { - "security": [ - { - "API Key": [] - }, - { - "Tenant ID": [] - }, - { - "Bearer Auth": [] - } - ], - "description": "Update the longlived trace TTL for a workspace.", - "tags": [ - "TTL Settings" - ], - "summary": "Update workspace TTL settings", - "parameters": [], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ttl_settings.TTLSettingsResponse" - } - } - } - }, - "400": { - "description": "Bad Request", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "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" - } - } - } - } - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ttl_settings.UpdateTTLSettingsRequest" - } + "x-public": true, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ttl_settings.UpdateTTLSettingsRequest" + } } } } @@ -45956,215 +47645,6 @@ }, "components": { "schemas": { - "AIMessage": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "ai", - "title": "Type", - "default": "ai" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "tool_calls": { - "items": { - "$ref": "#/components/schemas/ToolCall" - }, - "type": "array", - "title": "Tool Calls" - }, - "invalid_tool_calls": { - "items": { - "$ref": "#/components/schemas/InvalidToolCall" - }, - "type": "array", - "title": "Invalid Tool Calls" - }, - "usage_metadata": { - "anyOf": [ - { - "$ref": "#/components/schemas/UsageMetadata" - }, - { - "type": "null" - } - ] - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content" - ], - "title": "AIMessage", - "description": "Message from an AI.\n\nAn `AIMessage` is returned from a chat model as a response to a prompt.\n\nThis message represents the output of the model and consists of both\nthe raw output as returned by the model and standardized fields\n(e.g., tool calls, usage metadata) added by the LangChain framework." - }, - "AIMessageChunk": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "AIMessageChunk", - "title": "Type", - "default": "AIMessageChunk" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "tool_calls": { - "items": { - "$ref": "#/components/schemas/ToolCall" - }, - "type": "array", - "title": "Tool Calls" - }, - "invalid_tool_calls": { - "items": { - "$ref": "#/components/schemas/InvalidToolCall" - }, - "type": "array", - "title": "Invalid Tool Calls" - }, - "usage_metadata": { - "anyOf": [ - { - "$ref": "#/components/schemas/UsageMetadata" - }, - { - "type": "null" - } - ] - }, - "tool_call_chunks": { - "items": { - "$ref": "#/components/schemas/ToolCallChunk" - }, - "type": "array", - "title": "Tool Call Chunks" - }, - "chunk_position": { - "anyOf": [ - { - "type": "string", - "const": "last" - }, - { - "type": "null" - } - ], - "title": "Chunk Position" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content" - ], - "title": "AIMessageChunk", - "description": "Message chunk from an AI (yielded when streaming)." - }, "APIFeedbackSource": { "properties": { "type": { @@ -46328,6 +47808,18 @@ ], "title": "Expires At" }, + "revoked_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Revoked At" + }, "workspace_names": { "anyOf": [ { @@ -46387,6 +47879,37 @@ } ] }, + "created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created By" + }, + "is_tracing_key": { + "type": "boolean", + "title": "Is Tracing Key", + "default": false + }, + "workspace_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Workspace Ids", + "default": [] + }, + "can_delete": { + "type": "boolean", + "title": "Can Delete", + "description": "Whether tracing-key deletion authority has been confirmed. Legacy key responses do not evaluate this capability.", + "default": false + }, "key": { "type": "string", "title": "Key" @@ -46459,6 +47982,18 @@ ], "title": "Expires At" }, + "revoked_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Revoked At" + }, "workspace_names": { "anyOf": [ { @@ -46517,6 +48052,37 @@ "type": "null" } ] + }, + "created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created By" + }, + "is_tracing_key": { + "type": "boolean", + "title": "Is Tracing Key", + "default": false + }, + "workspace_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Workspace Ids", + "default": [] + }, + "can_delete": { + "type": "boolean", + "title": "Can Delete", + "description": "Whether tracing-key deletion authority has been confirmed. Legacy key responses do not evaluate this capability.", + "default": false } }, "type": "object", @@ -46659,6 +48225,17 @@ } ], "title": "Sso Only" + }, + "oidc_login_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Oidc Login Enabled" } }, "type": "object", @@ -46916,6 +48493,51 @@ } ], "title": "Is Assertion" + }, + "regex_validator": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/Missing" + } + ], + "maxLength": 500 + }, + { + "type": "null" + } + ], + "title": "Regex Validator", + "default": { + "__missing__": "__missing__" + } + }, + "feedback_config_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Feedback Config Id" + }, + "feedback_config": { + "anyOf": [ + { + "$ref": "#/components/schemas/FeedbackConfigSchema" + }, + { + "type": "null" + } + ], + "title": "Feedback Config" } }, "type": "object", @@ -47640,23 +49262,40 @@ } ], "title": "Num Reviewers Per Item", - "default": 1 + "default": { + "__missing__": "__missing__" + } }, "enable_reservations": { - "type": "boolean", + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/Missing" + } + ], "title": "Enable Reservations", - "default": true + "default": { + "__missing__": "__missing__" + } }, "reservation_minutes": { "anyOf": [ { "type": "integer" }, + { + "$ref": "#/components/schemas/Missing" + }, { "type": "null" } ], - "title": "Reservation Minutes" + "title": "Reservation Minutes", + "default": { + "__missing__": "__missing__" + } }, "rubric_items": { "anyOf": [ @@ -47746,50 +49385,6 @@ "title": "AppFeedbackSource", "description": "Feedback from the LangChainPlus App." }, - "Artifact": { - "properties": { - "id": { - "type": "string", - "title": "Id" - }, - "contents": { - "items": { - "$ref": "#/components/schemas/ArtifactContent" - }, - "type": "array", - "title": "Contents" - }, - "current_content_index": { - "type": "integer", - "title": "Current Content Index" - } - }, - "type": "object", - "required": [ - "id", - "contents", - "current_content_index" - ], - "title": "Artifact" - }, - "ArtifactContent": { - "properties": { - "index": { - "type": "integer", - "title": "Index" - }, - "content": { - "type": "string", - "title": "Content" - } - }, - "type": "object", - "required": [ - "index", - "content" - ], - "title": "ArtifactContent" - }, "AssignedReviewerSchema": { "properties": { "id": { @@ -47916,12 +49511,141 @@ } ], "title": "Resource Ids" + }, + "resource_owner_ls_user_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Resource Owner Ls User Id", + "description": "LangSmith user ID of the member the resource belonged to, set when that is not the actor." + }, + "delegated_from_sandbox_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Delegated From Sandbox Id", + "description": "Sandbox that made the call under an access-delegation grant, set when the actor fields name its delegator rather than a user acting directly." + }, + "duration_milliseconds": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Duration Milliseconds", + "description": "Time the server took to handle the request, in milliseconds." + }, + "user_agent": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "User Agent", + "description": "User-Agent header of the request, truncated to 256 bytes." + }, + "tool_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tool Name", + "description": "Tool the request invoked, as named by the caller." + }, + "caller": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Caller", + "description": "LangSmith product that made the request, as reported by the caller." + }, + "is_tool_error": { + "type": "boolean", + "title": "Is Tool Error", + "description": "True when the invoked tool reported a failure inside a successful response." + }, + "gateway": { + "anyOf": [ + { + "$ref": "#/components/schemas/AuditLogGateway" + }, + { + "type": "null" + } + ], + "description": "Managed Tools gateway the request went through." + }, + "upstream": { + "anyOf": [ + { + "$ref": "#/components/schemas/AuditLogUpstream" + }, + { + "type": "null" + } + ], + "description": "Server and tool a Managed Tools gateway routed the call to." + }, + "server": { + "anyOf": [ + { + "$ref": "#/components/schemas/AuditLogServer" + }, + { + "type": "null" + } + ], + "description": "Managed Tools MCP server the request reached." } }, "type": "object", "title": "AuditLogEnrichments", "description": "Non-indexed request metadata stored in the enrichments JSONB column." }, + "AuditLogGateway": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "title": "AuditLogGateway", + "description": "Managed Tools gateway a request went through." + }, "AuditLogMessage": { "properties": { "id": { @@ -48043,17 +49767,21 @@ "delete_api_key", "create_personal_access_token", "delete_personal_access_token", + "revoke_personal_access_token", + "reinstate_personal_access_token", "create_service_key", "delete_service_key", "update_service_key", "create_role", "update_role", "delete_role", + "upsert_role_restriction", "invite_user_to_org", "invite_users_to_org_batch", "add_basic_auth_users_to_org", "update_basic_auth_user", "delete_org_pending_member", + "update_org_pending_member", "delete_org_member", "update_org_member", "create_sso_settings", @@ -48061,6 +49789,12 @@ "delete_sso_settings", "update_default_sso_provision_organization", "update_login_methods", + "create_oidc_integration", + "update_oidc_integration", + "delete_oidc_integration", + "create_oidc_sso_settings", + "update_oidc_sso_settings", + "delete_oidc_sso_settings", "update_organization_info", "update_business_info", "update_payment_plan", @@ -48077,8 +49811,19 @@ "delete_workspace_member", "update_workspace_member", "delete_workspace_pending_member", + "update_workspace_pending_member", + "read_workspace_encrypted_secrets", "update_workspace_secrets", + "delete_workspace_secret", + "upsert_workspace_secret", + "read_org_encrypted_secrets", + "update_org_secrets", "unshare_entities", + "upsert_slack_app_configuration", + "delete_slack_app_configuration", + "upsert_github_app_configuration", + "update_github_app_configuration", + "delete_github_app_configuration", "set_tenant_handle", "create_tag_key", "update_tag_key", @@ -48088,10 +49833,19 @@ "delete_tag_value", "create_tagging", "delete_tagging", + "create_agent", + "create_agent_environment", + "update_agent", + "delete_agent", + "create_agent_runtime_binding", "update_tracer_session", "delete_tracer_session", "delete_tracer_sessions", "delete_runs", + "share_run", + "unshare_run", + "share_thread", + "unshare_thread", "create_dataset", "create_csv_dataset", "create_experiment_via_upload", @@ -48111,6 +49865,7 @@ "create_examples", "update_example", "update_examples", + "update_examples_metadata", "sync_examples", "delete_example", "delete_examples", @@ -48119,6 +49874,7 @@ "read_bulk_export_destination", "create_bulk_export_destination", "update_bulk_export_destination", + "delete_bulk_export_destination", "update_ttl_settings", "update_usage_limit", "delete_usage_limit", @@ -48149,8 +49905,21 @@ "delete_access_policy", "list_access_policies", "read_access_policy", + "update_access_policy", "attach_access_policies", + "detach_access_policies", "read_role_access_policies", + "read_team_access_policies", + "create_team", + "update_team", + "delete_team", + "add_team_members", + "attach_team_access_policy", + "detach_team_access_policy", + "remove_team_member", + "create_team_workspace_grant", + "update_team_workspace_grant", + "delete_team_workspace_grant", "create_scim_token", "update_scim_token", "delete_scim_token", @@ -48166,6 +49935,8 @@ "create_fleet_usage_limit", "update_fleet_usage_limit", "delete_fleet_usage_limit", + "update_credential", + "delete_credential", "create_experiment_view_override", "update_experiment_view_override", "delete_experiment_view_override", @@ -48179,15 +49950,53 @@ "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", + "submit_product_feedback", + "update_trace_flight_score", "create_mcp_server", "update_mcp_server", "delete_mcp_server", "register_mcp_server_oauth", + "create_mcp_credential_session", + "invoke_mcp_server", + "invoke_mcp_gateway", + "create_mcp_gateway", + "update_mcp_gateway", + "delete_mcp_gateway", + "refresh_mcp_gateway_tools", + "update_mcp_oidc_connection", + "delete_mcp_oidc_connection", + "create_mcp_profile", + "update_mcp_profile", + "delete_mcp_profile", "create_credential", + "read_credential_secret", + "read_credential_oauth2", + "create_oauth_provider", + "update_oauth_provider", + "delete_oauth_provider", + "start_oauth_connection", + "start_agent_auth_secret_input", + "create_agent_auth_connection", + "update_agent_auth_connection", + "delete_agent_auth_connection", + "update_agent_auth_app", + "delete_agent_auth_app", + "create_agent_auth_oidc_integration", + "update_agent_auth_oidc_integration", + "delete_agent_auth_oidc_integration", + "resolve_agent_auth_agent", + "create_agent_auth_app", "create_tool", "update_tool", "delete_tool", + "create_connection", + "update_connection", + "delete_connection", "create_mcp_vendor_settings", "update_mcp_vendor_settings", "delete_mcp_vendor_settings", @@ -48195,6 +50004,7 @@ "update_evaluator", "delete_evaluator", "bulk_delete_evaluators", + "test_evaluator", "upsert_feature_default_model", "delete_feature_default_model", "upsert_feature_disabled_model", @@ -48203,6 +50013,10 @@ "update_fleet_webhook", "delete_fleet_webhook", "test_fleet_webhook", + "create_webhook_destination", + "update_webhook_destination", + "delete_webhook_destination", + "test_webhook_destination", "create_commit", "create_hub_environment", "update_hub_environment", @@ -48213,12 +50027,18 @@ "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", "create_sandbox_policy", "update_sandbox_policy", "delete_sandbox_policy", + "create_computer_environment", + "update_computer_environment", + "archive_computer_environment", + "update_fleet_feedback", + "delete_fleet_feedback", "list_sandbox_claims", "get_sandbox_claim", "get_sandbox_claim_status", @@ -48229,6 +50049,7 @@ "start_sandbox_claim", "stop_sandbox_claim", "generate_sandbox_service_url", + "generate_sandbox_download_url", "capture_sandbox_snapshot", "list_sandbox_snapshots", "get_sandbox_snapshot", @@ -48240,6 +50061,8 @@ "update_sandbox_registry", "delete_sandbox_registry", "create_data_plane", + "delete_data_plane", + "update_data_plane", "create_annotation_queue", "populate_annotation_queue", "delete_annotation_queue", @@ -48251,6 +50074,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", @@ -48350,6 +50174,7 @@ "get_sso_settings_current", "list_org_service_keys", "list_org_personal_access_tokens", + "list_all_org_personal_access_tokens", "list_service_accounts", "list_filter_views", "get_filter_view", @@ -48383,15 +50208,21 @@ "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", "batch_query_trace_messages", "query_thread_messages", "query_single_thread_stats", + "query_thread_stats", "query_thread_traces", "query_threads", + "list_github_thread_outcomes", + "query_github_thread_outcomes", "list_pairwise_queues", "get_pairwise_queue", "list_pairwise_entries", @@ -48408,10 +50239,77 @@ "create_self_hosted_customer", "update_self_hosted_customer", "update_self_hosted_license", + "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", + "create_custom_app", + "update_custom_app", + "delete_custom_app", + "bulk_delete_custom_apps", + "update_custom_app_share", + "update_custom_app_claim", + "download_custom_app_source", + "create_custom_app_editing_credential", + "create_custom_app_editing_sandbox", + "delete_custom_app_editing_sandbox", "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 + }, + "AuditLogServer": { + "properties": { + "id": { + "type": "string", + "title": "Id" + }, + "key": { + "type": "string", + "title": "Key" + }, + "name": { + "type": "string", + "title": "Name" + }, + "host": { + "type": "string", + "title": "Host" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "AuditLogServer", + "description": "Managed Tools MCP server a request reached." + }, + "AuditLogUpstream": { + "properties": { + "server_id": { + "type": "string", + "title": "Server Id" + }, + "builtin_server_key": { + "type": "string", + "title": "Builtin Server Key" + }, + "tool_name": { + "type": "string", + "title": "Tool Name" + } + }, + "type": "object", + "required": [ + "tool_name" + ], + "title": "AuditLogUpstream", + "description": "Server and tool a Managed Tools gateway routed a call to." }, "AuthProvider": { "type": "string", @@ -48420,7 +50318,8 @@ "supabase:non-sso", "supabase:sso", "oidc", - "custom-oidc" + "custom-oidc", + "oidc-sso" ], "title": "AuthProvider" }, @@ -48600,43 +50499,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": { @@ -48664,7 +50526,8 @@ "type": "null" } ], - "title": "Trace" + "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": [ @@ -48874,6 +50737,7 @@ "maximum": 100.0, "minimum": 1.0, "title": "Limit", + "description": "Maximum number of runs to return. Not applied when trace is set — all runs in the trace are returned in a single response.", "default": 100 }, "select": { @@ -48971,7 +50835,8 @@ "type": "null" } ], - "title": "Trace" + "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": [ @@ -49181,6 +51046,7 @@ "maximum": 100.0, "minimum": 1.0, "title": "Limit", + "description": "Maximum number of runs to return. Not applied when trace is set — all runs in the trace are returned in a single response.", "default": 100 }, "select": { @@ -49308,6 +51174,22 @@ } ], "title": "Split" + }, + "tag_value_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "maxItems": 100 + }, + { + "type": "null" + } + ], + "title": "Tag Value Ids" } }, "type": "object", @@ -49397,6 +51279,18 @@ } ], "title": "Start Time" + }, + "end_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "End Time" } }, "type": "object", @@ -49457,8 +51351,8 @@ "properties": { "file": { "type": "string", - "format": "binary", - "title": "File" + "title": "File", + "format": "binary" }, "input_keys": { "items": { @@ -49574,6 +51468,17 @@ } ], "title": "Metadata Key Mappings" + }, + "tag_value_ids": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tag Value Ids" } }, "type": "object", @@ -49587,8 +51492,8 @@ "properties": { "file": { "type": "string", - "format": "binary", - "title": "File" + "title": "File", + "format": "binary" }, "input_keys": { "items": { @@ -49745,7 +51650,12 @@ }, "compression": { "$ref": "#/components/schemas/BulkExportCompression", - "default": "gzip" + "default": "zstandard" + }, + "is_rollup_disabled": { + "type": "boolean", + "title": "Is Rollup Disabled", + "default": false }, "interval_hours": { "anyOf": [ @@ -49905,7 +51815,12 @@ }, "compression": { "$ref": "#/components/schemas/BulkExportCompression", - "default": "gzip" + "default": "zstandard" + }, + "is_rollup_disabled": { + "type": "boolean", + "title": "Is Rollup Disabled", + "default": false }, "interval_hours": { "anyOf": [ @@ -50162,13 +52077,30 @@ "BulkExportDestinationUpdate": { "properties": { "credentials": { - "$ref": "#/components/schemas/BulkExportDestinationS3Credentials" + "anyOf": [ + { + "$ref": "#/components/schemas/BulkExportDestinationS3Credentials" + }, + { + "type": "null" + } + ] + }, + "aws_role_arn": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Aws Role Arn", + "description": "AWS IAM role ARN that LangSmith assumes instead of using static credentials." } }, "type": "object", - "required": [ - "credentials" - ], "title": "BulkExportDestinationUpdate" }, "BulkExportFormat": { @@ -50439,13 +52371,21 @@ "disabled", "developer", "developer_01_2026", + "developer_07_2026", + "developer_10_2026", "plus", "plus_01_2026", + "plus_07_2026", + "plus_10_2026", "startup", "startup_v0", + "startup_07_2026", + "startup_10_2026", "partner", "premier", - "free" + "free", + "free_07_2026", + "free_10_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." @@ -50454,143 +52394,8 @@ "properties": { "tier": { "$ref": "#/components/schemas/ChangePaymentPlanReq" - } - }, - "type": "object", - "required": [ - "tier" - ], - "title": "ChangePaymentPlanSchema", - "description": "Change payment plan schema." - }, - "ChatMessage": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "chat", - "title": "Type", - "default": "chat" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" }, - "role": { - "type": "string", - "title": "Role" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content", - "role" - ], - "title": "ChatMessage", - "description": "Message that can be assigned an arbitrary speaker (i.e. role)." - }, - "ChatMessageChunk": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "ChatMessageChunk", - "title": "Type", - "default": "ChatMessageChunk" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { + "display_name": { "anyOf": [ { "type": "string" @@ -50599,21 +52404,15 @@ "type": "null" } ], - "title": "Id" - }, - "role": { - "type": "string", - "title": "Role" + "title": "Display Name" } }, - "additionalProperties": true, "type": "object", "required": [ - "content", - "role" + "tier" ], - "title": "ChatMessageChunk", - "description": "Chat Message chunk." + "title": "ChangePaymentPlanSchema", + "description": "Change payment plan schema." }, "ClusteringJobConfigResponse": { "properties": { @@ -50671,7 +52470,19 @@ "prebuilt" ], "title": "ClusteringJobConfigResponse", - "description": "Full clustering job config with all details." + "description": "An Insights job configuration." + }, + "CodeEvaluatorInputType": { + "type": "string", + "enum": [ + "thread", + "all_messages", + "human_ai_pairs", + "first_human_last_ai", + "trajectory" + ], + "title": "CodeEvaluatorInputType", + "description": "Input provided to a code evaluator." }, "CodeEvaluatorLanguage": { "type": "string", @@ -50697,6 +52508,25 @@ } ], "default": "python" + }, + "require_attachments": { + "type": "boolean", + "title": "Require Attachments", + "default": false + }, + "code_evaluator_input": { + "anyOf": [ + { + "$ref": "#/components/schemas/CodeEvaluatorInputType" + }, + { + "type": "null" + } + ] + }, + "advanced_features_enabled": { + "type": "boolean", + "title": "Advanced Features Enabled" } }, "type": "object", @@ -51045,37 +52875,121 @@ "format": "date-time", "title": "Modified At" }, - "reference_dataset_id": { - "anyOf": [ - { - "type": "string", - "format": "uuid" - }, - { - "type": "null" - } - ], - "title": "Reference Dataset Id" + "reference_dataset_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Reference Dataset Id" + }, + "extra": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Extra" + } + }, + "type": "object", + "required": [ + "experiment_ids" + ], + "title": "ComparativeExperimentCreate", + "description": "Create class for ComparativeExperiment." + }, + "CompositeEvaluatorCreated": { + "properties": { + "rule_id": { + "type": "string", + "format": "uuid", + "title": "Rule Id" + }, + "evaluator_id": { + "type": "string", + "format": "uuid", + "title": "Evaluator Id" + } + }, + "type": "object", + "required": [ + "rule_id", + "evaluator_id" + ], + "title": "CompositeEvaluatorCreated", + "description": "Result of creating a composite score as a code evaluator + run rule." + }, + "CompositeMigrationRequest": { + "properties": { + "formula_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Formula Ids" + } + }, + "type": "object", + "required": [ + "formula_ids" + ], + "title": "CompositeMigrationRequest", + "description": "A batch of feedback_formulas ids to migrate to the v2 model.\n\nAll ids are processed in the tenant of the calling service-key token; ids for\nother tenants (or already migrated / nonexistent) are reported as skipped,\nnever migrated. Both session-scoped and dataset-scoped formulas are migrated." + }, + "CompositeMigrationResult": { + "properties": { + "migrated": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Migrated" + }, + "skipped": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Skipped" + }, + "failed": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Failed" }, - "extra": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "title": "Extra" + "rejected": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Rejected" } }, "type": "object", "required": [ - "experiment_ids" + "migrated", + "skipped", + "failed", + "rejected" ], - "title": "ComparativeExperimentCreate", - "description": "Create class for ComparativeExperiment." + "title": "CompositeMigrationResult", + "description": "Per-id outcome of a composite migration batch." }, "ConfiguredBy": { "type": "string", @@ -51124,7 +53038,7 @@ "config" ], "title": "CreateClusteringJobConfigRequest", - "description": "Request to create a clustering job config." + "description": "Request to create an Insights job configuration." }, "CreateClusteringJobConfigResponse": { "properties": { @@ -51171,7 +53085,7 @@ "config" ], "title": "CreateClusteringJobConfigResponse", - "description": "Response to create a clustering job config." + "description": "An Insights job configuration." }, "CreateCommentRequest": { "properties": { @@ -51206,6 +53120,11 @@ ], "title": "Is Lower Score Better", "default": false + }, + "is_enforced": { + "type": "boolean", + "title": "Is Enforced", + "default": false } }, "type": "object", @@ -51217,6 +53136,22 @@ }, "CreateRepoRequest": { "properties": { + "tag_value_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "maxItems": 100 + }, + { + "type": "null" + } + ], + "title": "Tag Value Ids" + }, "repo_handle": { "type": "string", "title": "Repo Handle" @@ -51540,7 +53475,7 @@ }, "type": "object", "title": "CreateRunClusteringJobRequest", - "description": "Request to create a run clustering job." + "description": "Configuration for an Insights job." }, "CreateRunClusteringJobResponse": { "properties": { @@ -51576,7 +53511,7 @@ "status" ], "title": "CreateRunClusteringJobResponse", - "description": "Response to creating a run clustering job." + "description": "An Insights job queued for execution." }, "CustomChartCreate": { "properties": { @@ -51609,7 +53544,16 @@ "title": "Index" }, "chart_type": { - "$ref": "#/components/schemas/CustomChartType" + "type": "string", + "enum": [ + "line", + "bar", + "table", + "kpi", + "top-k", + "pie" + ], + "title": "Chart Type" }, "series": { "items": { @@ -51621,103 +53565,676 @@ "section_id": { "anyOf": [ { - "type": "string", - "format": "uuid" + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Section Id" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "common_filters": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartSeriesFilters" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "title", + "chart_type", + "series" + ], + "title": "CustomChartCreate" + }, + "CustomChartCreatePreview": { + "properties": { + "series": { + "items": { + "$ref": "#/components/schemas/CustomChartSeries-Input" + }, + "type": "array", + "title": "Series" + }, + "common_filters": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartSeriesFilters" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "series" + ], + "title": "CustomChartCreatePreview" + }, + "CustomChartFeedbackCountMetric": { + "properties": { + "type": { + "type": "string", + "const": "count", + "title": "Type", + "default": "count" + }, + "entity": { + "type": "string", + "const": "feedback", + "title": "Entity" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + }, + "params": { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetricParams" + } + }, + "type": "object", + "required": [ + "entity", + "params" + ], + "title": "CustomChartFeedbackCountMetric" + }, + "CustomChartFeedbackCountMetricParams": { + "properties": { + "feedback_key": { + "type": "string", + "title": "Feedback Key" + } + }, + "type": "object", + "required": [ + "feedback_key" + ], + "title": "CustomChartFeedbackCountMetricParams" + }, + "CustomChartFeedbackScoreMetricPercentile": { + "properties": { + "type": { + "type": "string", + "const": "percentile", + "title": "Type" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + }, + "field": { + "type": "string", + "const": "feedback_score", + "title": "Field" + }, + "params": { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentileParams" + } + }, + "type": "object", + "required": [ + "type", + "field", + "params" + ], + "title": "CustomChartFeedbackScoreMetricPercentile" + }, + "CustomChartFeedbackScoreMetricPercentileParams": { + "properties": { + "p": { + "type": "number", + "maximum": 1.0, + "minimum": 0.0, + "title": "P" + }, + "feedback_key": { + "type": "string", + "title": "Feedback Key" + } + }, + "type": "object", + "required": [ + "p", + "feedback_key" + ], + "title": "CustomChartFeedbackScoreMetricPercentileParams" + }, + "CustomChartFeedbackScoreMetricScalar": { + "properties": { + "type": { + "anyOf": [ + { + "type": "string", + "const": "sum" + }, + { + "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": { + "type": "string", + "const": "dataset", + "title": "Source Type" + }, + "dataset_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Dataset Ids" + } + }, + "type": "object", + "required": [ + "source_type", + "dataset_ids" + ], + "title": "CustomChartFilterByDataset" + }, + "CustomChartFilterByTracingProject": { + "properties": { + "source_type": { + "type": "string", + "const": "tracing_project", + "title": "Source Type" + }, + "run_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Run Filter" + }, + "trace_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Trace Filter" + }, + "tree_filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tree Filter" + }, + "project_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Project Ids" + } + }, + "type": "object", + "required": [ + "source_type", + "project_ids" + ], + "title": "CustomChartFilterByTracingProject" + }, + "CustomChartGroupByComplex": { + "properties": { + "attribute": { + "anyOf": [ + { + "type": "string", + "const": "metadata" + }, + { + "type": "string", + "const": "feedback_label" + } + ], + "title": "Attribute" + }, + "path": { + "type": "string", + "title": "Path" + } + }, + "type": "object", + "required": [ + "attribute", + "path" + ], + "title": "CustomChartGroupByComplex" + }, + "CustomChartGroupByPlain": { + "properties": { + "attribute": { + "anyOf": [ + { + "type": "string", + "const": "name" + }, + { + "type": "string", + "const": "run_type" + }, + { + "type": "string", + "const": "tag" + }, + { + "type": "string", + "const": "project" + }, + { + "type": "string", + "const": "status" + } + ], + "title": "Attribute" + } + }, + "type": "object", + "required": [ + "attribute" + ], + "title": "CustomChartGroupByPlain" + }, + "CustomChartMetric": { + "type": "string", + "enum": [ + "run_count", + "latency_p50", + "latency_p99", + "latency_avg", + "first_token_p50", + "first_token_p99", + "total_tokens", + "prompt_tokens", + "completion_tokens", + "median_tokens", + "completion_tokens_p50", + "prompt_tokens_p50", + "tokens_p99", + "completion_tokens_p99", + "prompt_tokens_p99", + "feedback", + "feedback_score_avg", + "feedback_values", + "total_cost", + "prompt_cost", + "completion_cost", + "error_rate", + "streaming_rate", + "cost_p50", + "cost_p99" + ], + "title": "CustomChartMetric", + "description": "Metrics you can chart. Feedback metrics are not available for organization-scoped charts." + }, + "CustomChartMetricCount": { + "properties": { + "type": { + "type": "string", + "const": "count", + "title": "Type", + "default": "count" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + } + }, + "type": "object", + "title": "CustomChartMetricCount" + }, + "CustomChartMetricField": { + "type": "string", + "enum": [ + "latency_seconds", + "first_token_seconds", + "total_tokens", + "prompt_tokens", + "completion_tokens", + "prompt_token_details.cache_creation", + "prompt_token_details.cache_read", + "prompt_token_details.ephemeral_1h_input_tokens", + "prompt_token_details.ephemeral_5m_input_tokens", + "prompt_token_details.audio", + "prompt_token_details.image", + "prompt_token_details.video", + "completion_token_details.reasoning", + "completion_token_details.audio", + "completion_token_details.image", + "completion_token_details.video", + "total_cost", + "prompt_cost", + "completion_cost", + "feedback_score" + ], + "title": "CustomChartMetricField" + }, + "CustomChartMetricPercentile": { + "properties": { + "type": { + "type": "string", + "const": "percentile", + "title": "Type" + }, + "filter": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Filter" + }, + "field": { + "$ref": "#/components/schemas/CustomChartMetricField" + }, + "params": { + "$ref": "#/components/schemas/CustomChartMetricPercentileParams" + } + }, + "type": "object", + "required": [ + "type", + "field", + "params" + ], + "title": "CustomChartMetricPercentile" + }, + "CustomChartMetricPercentileParams": { + "properties": { + "p": { + "type": "number", + "maximum": 1.0, + "minimum": 0.0, + "title": "P" + } + }, + "type": "object", + "required": [ + "p" + ], + "title": "CustomChartMetricPercentileParams" + }, + "CustomChartMetricRatio-Input": { + "properties": { + "type": { + "type": "string", + "const": "ratio", + "title": "Type" + }, + "numerator": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + } + ], + "title": "Numerator" + }, + "denominator": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + } + ], + "title": "Denominator" + } + }, + "type": "object", + "required": [ + "type", + "numerator", + "denominator" + ], + "title": "CustomChartMetricRatio" + }, + "CustomChartMetricRatio-Output": { + "properties": { + "type": { + "type": "string", + "const": "ratio", + "title": "Type" + }, + "numerator": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" }, { - "type": "null" - } - ], - "title": "Section Id" - }, - "metadata": { - "anyOf": [ + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, { - "additionalProperties": true, - "type": "object" + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" }, { - "type": "null" + "$ref": "#/components/schemas/CustomChartMetricPercentile" } ], - "title": "Metadata" + "title": "Numerator" }, - "common_filters": { + "denominator": { "anyOf": [ { - "$ref": "#/components/schemas/CustomChartSeriesFilters" + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" }, { - "type": "null" + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" } - ] + ], + "title": "Denominator" } }, "type": "object", "required": [ - "title", - "chart_type", - "series" + "type", + "numerator", + "denominator" ], - "title": "CustomChartCreate" + "title": "CustomChartMetricRatio" }, - "CustomChartCreatePreview": { + "CustomChartMetricScalar": { "properties": { - "series": { - "items": { - "$ref": "#/components/schemas/CustomChartSeries" - }, - "type": "array", - "title": "Series" + "type": { + "anyOf": [ + { + "type": "string", + "const": "sum" + }, + { + "type": "string", + "const": "max" + }, + { + "type": "string", + "const": "min" + }, + { + "type": "string", + "const": "avg" + } + ], + "title": "Type" }, - "common_filters": { + "field": { + "$ref": "#/components/schemas/CustomChartMetricField" + }, + "filter": { "anyOf": [ { - "$ref": "#/components/schemas/CustomChartSeriesFilters" + "type": "string" }, { "type": "null" } - ] + ], + "title": "Filter" } }, "type": "object", "required": [ - "series" - ], - "title": "CustomChartCreatePreview" - }, - "CustomChartMetric": { - "type": "string", - "enum": [ - "run_count", - "latency_p50", - "latency_p99", - "latency_avg", - "first_token_p50", - "first_token_p99", - "total_tokens", - "prompt_tokens", - "completion_tokens", - "median_tokens", - "completion_tokens_p50", - "prompt_tokens_p50", - "tokens_p99", - "completion_tokens_p99", - "prompt_tokens_p99", - "feedback", - "feedback_score_avg", - "feedback_values", - "total_cost", - "prompt_cost", - "completion_cost", - "error_rate", - "streaming_rate", - "cost_p50", - "cost_p99" + "type", + "field" ], - "title": "CustomChartMetric", - "description": "Metrics you can chart. Feedback metrics are not available for organization-scoped charts." + "title": "CustomChartMetricScalar" }, "CustomChartPreviewRequest": { "properties": { @@ -51762,7 +54279,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", @@ -51785,7 +54311,7 @@ "anyOf": [ { "items": { - "$ref": "#/components/schemas/CustomChartSeries" + "$ref": "#/components/schemas/CustomChartSeries-Output" }, "type": "array" }, @@ -51807,12 +54333,24 @@ ], "title": "CustomChartResponse" }, - "CustomChartSeries": { + "CustomChartSeries-Input": { "properties": { "name": { "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -51824,7 +54362,24 @@ ] }, "metric": { - "$ref": "#/components/schemas/CustomChartMetric" + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartMetric" + }, + { + "type": "null" + } + ] + }, + "project_metric": { + "anyOf": [ + { + "$ref": "#/components/schemas/HostProjectChartMetric" + }, + { + "type": "null" + } + ] }, "feedback_key": { "anyOf": [ @@ -51849,6 +54404,138 @@ ], "title": "Workspace Id" }, + "metric_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-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" + }, + "id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "string" + } + ], + "title": "Id" + }, + "group_by": { + "anyOf": [ + { + "$ref": "#/components/schemas/RunStatsGroupBySeriesResponse" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "name", + "id" + ], + "title": "CustomChartSeries" + }, + "CustomChartSeries-Output": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, + "filters": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartSeriesFilters" + }, + { + "type": "null" + } + ] + }, + "metric": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartMetric" + }, + { + "type": "null" + } + ] + }, "project_metric": { "anyOf": [ { @@ -51859,6 +54546,93 @@ } ] }, + "feedback_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Feedback Key" + }, + "workspace_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Workspace Id" + }, + "metric_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-Output" + }, + { + "type": "null" + } + ], + "title": "Metric Definition" + }, + "group_by_definitions": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartGroupByPlain" + }, + { + "$ref": "#/components/schemas/CustomChartGroupByComplex" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Group By Definitions" + }, + "filter_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFilterByTracingProject" + }, + { + "$ref": "#/components/schemas/CustomChartFilterByDataset" + }, + { + "type": "null" + } + ], + "title": "Filter Definition" + }, "id": { "anyOf": [ { @@ -51885,7 +54659,6 @@ "type": "object", "required": [ "name", - "metric", "id" ], "title": "CustomChartSeries" @@ -51896,6 +54669,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -51907,7 +54692,24 @@ ] }, "metric": { - "$ref": "#/components/schemas/CustomChartMetric" + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartMetric" + }, + { + "type": "null" + } + ] + }, + "project_metric": { + "anyOf": [ + { + "$ref": "#/components/schemas/HostProjectChartMetric" + }, + { + "type": "null" + } + ] }, "feedback_key": { "anyOf": [ @@ -51932,15 +54734,69 @@ ], "title": "Workspace Id" }, - "project_metric": { + "metric_definition": { "anyOf": [ { - "$ref": "#/components/schemas/HostProjectChartMetric" + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-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" }, "group_by": { "anyOf": [ @@ -51955,8 +54811,7 @@ }, "type": "object", "required": [ - "name", - "metric" + "name" ], "title": "CustomChartSeriesCreate" }, @@ -52020,6 +54875,18 @@ "type": "string", "title": "Name" }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + }, "filters": { "anyOf": [ { @@ -52031,7 +54898,24 @@ ] }, "metric": { - "$ref": "#/components/schemas/CustomChartMetric" + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartMetric" + }, + { + "type": "null" + } + ] + }, + "project_metric": { + "anyOf": [ + { + "$ref": "#/components/schemas/HostProjectChartMetric" + }, + { + "type": "null" + } + ] }, "feedback_key": { "anyOf": [ @@ -52056,15 +54940,69 @@ ], "title": "Workspace Id" }, - "project_metric": { + "metric_definition": { "anyOf": [ { - "$ref": "#/components/schemas/HostProjectChartMetric" + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-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" }, "group_by": { "anyOf": [ @@ -52091,16 +55029,91 @@ }, "type": "object", "required": [ - "name", - "metric" + "name" ], "title": "CustomChartSeriesUpdate" }, + "CustomChartSeriesV2Equivalent": { + "properties": { + "metric_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFeedbackCountMetric" + }, + { + "$ref": "#/components/schemas/CustomChartMetricCount" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartMetricScalar" + }, + { + "$ref": "#/components/schemas/CustomChartFeedbackScoreMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricPercentile" + }, + { + "$ref": "#/components/schemas/CustomChartMetricRatio-Output" + }, + { + "type": "null" + } + ], + "title": "Metric Definition" + }, + "group_by_definitions": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartGroupByPlain" + }, + { + "$ref": "#/components/schemas/CustomChartGroupByComplex" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Group By Definitions" + }, + "filter_definition": { + "anyOf": [ + { + "$ref": "#/components/schemas/CustomChartFilterByTracingProject" + }, + { + "$ref": "#/components/schemas/CustomChartFilterByDataset" + }, + { + "type": "null" + } + ], + "title": "Filter Definition" + } + }, + "type": "object", + "title": "CustomChartSeriesV2Equivalent", + "description": "A V1 series' translated V2 equivalent, for display only — does not\nmean the series itself has been migrated.\n\nKept separate from metric_definition/group_by_definitions/\nfilter_definition, since merging would violate CustomChartSeriesBase's\nexactly-one-of-metric-or-metric_definition invariant for V1 series." + }, "CustomChartType": { "type": "string", "enum": [ "line", - "bar" + "bar", + "table", + "kpi", + "top-k", + "pie", + "text" ], "title": "CustomChartType", "description": "Enum for custom chart types." @@ -52234,6 +55247,20 @@ "default": { "__missing__": "__missing__" } + }, + "markdown": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/Missing" + } + ], + "title": "Markdown", + "default": { + "__missing__": "__missing__" + } } }, "type": "object", @@ -52480,7 +55507,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" @@ -52498,6 +55544,16 @@ } ], "title": "Sub Sections" + }, + "layout": { + "anyOf": [ + { + "$ref": "#/components/schemas/DashboardLayout-Output" + }, + { + "type": "null" + } + ] } }, "type": "object", @@ -52723,6 +55779,23 @@ "default": { "__missing__": "__missing__" } + }, + "layout": { + "anyOf": [ + { + "$ref": "#/components/schemas/DashboardLayout-Input" + }, + { + "$ref": "#/components/schemas/Missing" + }, + { + "type": "null" + } + ], + "title": "Layout", + "default": { + "__missing__": "__missing__" + } } }, "type": "object", @@ -52758,24 +55831,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": "Markdown" + }, + "index": { + "type": "integer", + "title": "Index" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metadata" + } + }, + "type": "object", + "required": [ + "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", - "title": "Customer Name" + "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": [ - "customer_id", - "customer_name" + "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": { @@ -52808,6 +56003,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": [ @@ -52981,6 +56318,22 @@ }, "DatasetCreate": { "properties": { + "tag_value_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "maxItems": 100 + }, + { + "type": "null" + } + ], + "title": "Tag Value Ids" + }, "name": { "type": "string", "title": "Name" @@ -53576,7 +56929,7 @@ "message" ], "title": "DeleteClusteringJobConfigResponse", - "description": "Response to delete a clustering job config." + "description": "Confirmation that an Insights job configuration was deleted." }, "DeleteRunClusteringJobResponse": { "properties": { @@ -53596,7 +56949,7 @@ "message" ], "title": "DeleteRunClusteringJobResponse", - "description": "Response to delete a session cluster job." + "description": "Confirmation that an Insights job was deleted." }, "DemoConfig": { "properties": { @@ -53691,6 +57044,51 @@ "title": "EvaluateExperimentRequest", "description": "Request body for evaluating an experiment." }, + "EvaluatorSpendDefaultBody": { + "properties": { + "limit_usd": { + "type": "number", + "exclusiveMinimum": 0.0, + "title": "Limit Usd" + }, + "window": { + "type": "string", + "enum": [ + "hourly", + "daily", + "weekly", + "monthly" + ], + "title": "Window" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "limit_usd", + "window" + ], + "title": "EvaluatorSpendDefaultBody", + "description": "Request shape for PUT. Matchers, name, type, action, and priority\nare server-defined; only limit and window are caller-controlled." + }, + "EvaluatorSpendDefaultResponse": { + "properties": { + "limit_usd": { + "type": "number", + "title": "Limit Usd" + }, + "window": { + "type": "string", + "title": "Window" + } + }, + "type": "object", + "required": [ + "limit_usd", + "window" + ], + "title": "EvaluatorSpendDefaultResponse" + }, "EvaluatorStructuredOutput": { "properties": { "hub_ref": { @@ -53776,6 +57174,17 @@ } ], "title": "Model" + }, + "playground_settings_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Model Configuration ID" } }, "type": "object", @@ -53825,6 +57234,42 @@ ], "title": "Source Run Id" }, + "source_session_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Session Id" + }, + "source_run_start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Source Run Start Time" + }, + "source_trace_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Trace Id" + }, "metadata": { "anyOf": [ { @@ -53868,6 +57313,17 @@ ], "title": "Modified At" }, + "source_thread_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Thread Id" + }, "attachment_urls": { "anyOf": [ { @@ -53922,7 +57378,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -54045,7 +57502,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -54056,7 +57514,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -54106,6 +57565,10 @@ "name", "dataset_id", "source_run_id", + "source_session_id", + "source_run_start_time", + "source_trace_id", + "source_thread_id", "metadata", "inputs", "outputs", @@ -54445,6 +57908,42 @@ ], "title": "Source Run Id" }, + "source_session_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Session Id" + }, + "source_run_start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Source Run Start Time" + }, + "source_trace_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Trace Id" + }, "metadata": { "anyOf": [ { @@ -54488,6 +57987,17 @@ ], "title": "Modified At" }, + "source_thread_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Thread Id" + }, "attachment_urls": { "anyOf": [ { @@ -54658,6 +58168,22 @@ }, "ExperimentResultsUpload": { "properties": { + "tag_value_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "maxItems": 100 + }, + { + "type": "null" + } + ], + "title": "Tag Value Ids" + }, "experiment_name": { "type": "string", "title": "Experiment Name" @@ -54890,6 +58416,11 @@ }, "FeedbackConfigSchema": { "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, "feedback_key": { "type": "string", "title": "Feedback Key" @@ -54917,10 +58448,26 @@ } ], "title": "Is Lower Score Better" + }, + "is_enforced": { + "type": "boolean", + "title": "Is Enforced", + "default": false + }, + "is_first": { + "type": "boolean", + "title": "Is First", + "default": false + }, + "is_deleted": { + "type": "boolean", + "title": "Is Deleted", + "default": false } }, "type": "object", "required": [ + "id", "feedback_key", "feedback_config", "tenant_id", @@ -55234,7 +58781,16 @@ "type": "null" } ], - "title": "Session Id" + "title": "Session Id", + "description": "Required unless the feedback is addressed by address. The ID of the tracing project (session) the feedback belongs to." + }, + "address": { + "type": "string", + "title": "Address", + "description": "Beta. Only supported in workspaces where Agent addressing is enabled; other workspaces get a 403. Addresses the tracing project through an Agent environment, as lrn:agents/{id}/environments/{environment}, instead of session_id. The id is 1 to 63 lowercase ASCII letters, digits, or hyphens, starting with a letter and ending with a letter or digit. The environment is local, development, staging, or production, matched case-insensitively. Never combined with session_id. The Agent and the environment must already exist; sending feedback does not create them.", + "examples": [ + "lrn:agents/support-agent/environments/production" + ] }, "trace_id": { "anyOf": [ @@ -55260,6 +58816,22 @@ ], "title": "Start Time" }, + "feedback_thread_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Feedback Thread Id" + }, + "extend_trace_retention": { + "type": "boolean", + "title": "Extend Trace Retention", + "default": true + }, "id": { "type": "string", "format": "uuid", @@ -55306,7 +58878,21 @@ { "type": "null" } - ] + ], + "description": "The scale the score is checked against. If the feedback key already has a feedback config, this must match it exactly or the request is rejected; if it has none, this becomes the key's feedback config." + }, + "feedback_config_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Feedback Config Id", + "description": "The ID of the feedback config this feedback was written against. It must be a feedback config for this feedback key in the same workspace, or the feedback is rejected. It doesn't change how the score is checked; feedback_config does that. If omitted, the server may record the key's enforced feedback config, or the one created for the key by this request." }, "error": { "anyOf": [ @@ -55317,7 +58903,21 @@ "type": "null" } ], - "title": "Error" + "title": "Error", + "description": "Deprecated. Use `extra.error` instead. If both values are provided, `error` takes precedence.", + "deprecated": true + }, + "extra": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Extra" } }, "type": "object", @@ -55346,6 +58946,11 @@ ], "title": "Score" }, + "extend_trace_retention": { + "type": "boolean", + "title": "Extend Trace Retention", + "default": true + }, "value": { "anyOf": [ { @@ -56153,6 +59758,17 @@ ], "title": "Tree Filter String" }, + "thread_filter_string": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Thread Filter String" + }, "display_name": { "type": "string", "title": "Display Name" @@ -56172,6 +59788,11 @@ "$ref": "#/components/schemas/FilterViewType", "default": "runs" }, + "syntax_version": { + "type": "integer", + "title": "Syntax Version", + "default": 1 + }, "start_time": { "anyOf": [ { @@ -56279,6 +59900,17 @@ ], "title": "Tree Filter String" }, + "thread_filter_string": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Thread Filter String" + }, "display_name": { "type": "string", "title": "Display Name" @@ -56298,6 +59930,15 @@ "$ref": "#/components/schemas/FilterViewType", "default": "runs" }, + "syntax_version": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "title": "Syntax Version", + "default": 1 + }, "start_time": { "anyOf": [ { @@ -56430,6 +60071,17 @@ ], "title": "Tree Filter String" }, + "thread_filter_string": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Thread Filter String" + }, "type": { "anyOf": [ { @@ -56440,6 +60092,21 @@ } ] }, + "syntax_version": { + "anyOf": [ + { + "type": "integer", + "enum": [ + 1, + 2 + ] + }, + { + "type": "null" + } + ], + "title": "Syntax Version" + }, "start_time": { "anyOf": [ { @@ -56481,6 +60148,22 @@ }, "ForkRepoRequest": { "properties": { + "tag_value_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "maxItems": 100 + }, + { + "type": "null" + } + ], + "title": "Tag Value Ids" + }, "repo_handle": { "type": "string", "title": "Repo Handle" @@ -56540,136 +60223,6 @@ "title": "ForkRepoRequest", "description": "Fields to fork a repo" }, - "FunctionMessage": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "function", - "title": "Type", - "default": "function" - }, - "name": { - "type": "string", - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content", - "name" - ], - "title": "FunctionMessage", - "description": "Message for passing the result of executing a tool back to a model.\n\n`FunctionMessage` are an older version of the `ToolMessage` schema, and\ndo not contain the `tool_call_id` field.\n\nThe `tool_call_id` field is used to associate the tool call request with the\ntool call response. Useful in situations where a chat model is able\nto request multiple tool calls in parallel." - }, - "FunctionMessageChunk": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "FunctionMessageChunk", - "title": "Type", - "default": "FunctionMessageChunk" - }, - "name": { - "type": "string", - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content", - "name" - ], - "title": "FunctionMessageChunk", - "description": "Function Message chunk." - }, "GenerateClusteringJobConfigRequest": { "properties": { "user_context": { @@ -56716,7 +60269,7 @@ "user_context" ], "title": "GenerateClusteringJobConfigRequest", - "description": "Request to auto-generate a clustering job config." + "description": "Request to generate an Insights job configuration." }, "GenerateClusteringJobConfigResponse": { "properties": { @@ -56756,7 +60309,7 @@ "summary_prompt" ], "title": "GenerateClusteringJobConfigResponse", - "description": "Auto-generated clustering job config (not persisted; frontend creates the config)." + "description": "Generated Insights job configuration. This configuration is not saved." }, "GenerateSyntheticExamplesBody": { "properties": { @@ -56801,7 +60354,7 @@ "configs" ], "title": "GetClusteringJobConfigsResponse", - "description": "Response to get clustering job configs." + "description": "A collection of Insights job configurations." }, "GetDatasetsSelect": { "type": "string", @@ -56867,7 +60420,7 @@ "description" ], "title": "GetRunClusterResponse", - "description": "Response to get a specific cluster from a specific cluster job." + "description": "A cluster in an Insights report." }, "GetRunClusteringJobResponse": { "properties": { @@ -56989,7 +60542,7 @@ "clusters" ], "title": "GetRunClusteringJobResponse", - "description": "Response to get a specific cluster job for a session." + "description": "An Insights job and the report it produced." }, "GetRunClusteringJobsResponse": { "properties": { @@ -57006,7 +60559,7 @@ "clustering_jobs" ], "title": "GetRunClusteringJobsResponse", - "description": "Response to get all cluster jobs for a session." + "description": "A collection of Insights jobs." }, "GranularUsageDimensions": { "properties": { @@ -57513,7 +61066,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -57524,7 +61078,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -57535,7 +61090,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -57707,7 +61263,7 @@ "properties": { "detail": { "items": { - "$ref": "#/components/schemas/ValidationError" + "type": "string" }, "type": "array", "title": "Detail" @@ -57730,34 +61286,6 @@ "title": "HealthInfoGetResponse", "description": "The LangSmith server info." }, - "Highlight": { - "properties": { - "prompt_chunk_start_index": { - "type": "integer", - "title": "Prompt Chunk Start Index" - }, - "prompt_chunk_end_index": { - "type": "integer", - "title": "Prompt Chunk End Index" - }, - "prompt_chunk": { - "type": "string", - "title": "Prompt Chunk" - }, - "highlight_text": { - "type": "string", - "title": "Highlight Text" - } - }, - "type": "object", - "required": [ - "prompt_chunk_start_index", - "prompt_chunk_end_index", - "prompt_chunk", - "highlight_text" - ], - "title": "Highlight" - }, "HighlightedRun": { "properties": { "run_id": { @@ -57815,7 +61343,7 @@ "highlight_reason" ], "title": "HighlightedRun", - "description": "A trace highlighted in an insights report summary. Up to 10 per insights job." + "description": "A trace highlighted in an Insights report summary. Up to 10 per report." }, "HostProjectChartMetric": { "type": "string", @@ -57829,153 +61357,12 @@ "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." }, - "HumanMessage": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "human", - "title": "Type", - "default": "human" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content" - ], - "title": "HumanMessage", - "description": "Message from the user.\n\nA `HumanMessage` is a message that is passed in from a user to the model.\n\nExample:\n ```python\n from langchain_core.messages import HumanMessage, SystemMessage\n\n messages = [\n SystemMessage(content=\"You are a helpful assistant! Your name is Bob.\"),\n HumanMessage(content=\"What is your name?\"),\n ]\n\n # Instantiate a chat model and invoke it with the messages\n model = ...\n print(model.invoke(messages))\n ```" - }, - "HumanMessageChunk": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "HumanMessageChunk", - "title": "Type", - "default": "HumanMessageChunk" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content" - ], - "title": "HumanMessageChunk", - "description": "Human Message chunk." - }, "Identity": { "properties": { "id": { @@ -58182,88 +61569,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": { - "type": "integer", - "title": "Audio" - }, - "cache_creation": { - "type": "integer", - "title": "Cache Creation" - }, - "cache_read": { - "type": "integer", - "title": "Cache Read" - } - }, - "type": "object", - "title": "InputTokenDetails", - "description": "Breakdown of input token counts.\n\nDoes *not* need to sum to full input token count. Does *not* need to have all keys.\n\nExample:\n ```python\n {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n }\n ```\n\nMay also hold extra provider-specific keys.\n\n!!! version-added \"Added in `langchain-core` 0.3.9\"" - }, "InsightsSummary": { "properties": { "key_points": { @@ -58306,7 +61611,7 @@ }, "type": "object", "title": "InsightsSummary", - "description": "High level summary of an insights job that pulls out patterns and specific traces." + "description": "High-level summary of an Insights report with patterns and specific traces." }, "InternalSecretsResponse": { "properties": { @@ -58333,85 +61638,6 @@ ], "title": "InternalSecretsResponse" }, - "InvalidToolCall": { - "properties": { - "type": { - "type": "string", - "const": "invalid_tool_call", - "title": "Type" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Error" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "string" - } - ], - "title": "Index" - }, - "extras": { - "additionalProperties": true, - "type": "object", - "title": "Extras" - } - }, - "type": "object", - "required": [ - "type", - "id", - "name", - "args", - "error" - ], - "title": "InvalidToolCall", - "description": "Allowance for errors made by LLM.\n\nHere we add an `error` key to surface errors made during generation\n(e.g., invalid JSON arguments.)" - }, "InvokePromptPayload": { "properties": { "messages": { @@ -58475,6 +61701,22 @@ ], "title": "LikeRepoResponse" }, + "ListAuditLogOperationsResponse": { + "properties": { + "operations": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Operations" + } + }, + "type": "object", + "required": [ + "operations" + ], + "title": "ListAuditLogOperationsResponse" + }, "ListAuditLogsOCSFResponse": { "properties": { "cursor": { @@ -58997,7 +62239,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Prompt Cost" @@ -59008,7 +62251,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Completion Cost" @@ -59022,7 +62266,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -59043,7 +62288,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -59077,6 +62323,169 @@ "title": "ModelPriceMapCreateSchema", "description": "Model price map create schema." }, + "ModelPriceMapProviderSchema": { + "properties": { + "provider": { + "type": "string", + "title": "Provider" + }, + "count": { + "type": "integer", + "title": "Count" + } + }, + "type": "object", + "required": [ + "provider", + "count" + ], + "title": "ModelPriceMapProviderSchema", + "description": "A provider that model price maps apply to, with how many maps use it." + }, + "ModelPriceMapProvidersResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/ModelPriceMapProviderSchema" + }, + "type": "array", + "title": "Items" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + } + }, + "type": "object", + "required": [ + "items", + "next_cursor" + ], + "title": "ModelPriceMapProvidersResponse", + "description": "Providers that model price maps apply to, most used first." + }, + "ModelPriceMapSchema": { + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Start Time" + }, + "tenant_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Tenant Id" + }, + "match_path": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Match Path", + "default": [ + "model", + "model_name", + "model_id", + "model_path", + "endpoint_name" + ] + }, + "match_pattern": { + "type": "string", + "title": "Match Pattern" + }, + "prompt_cost": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", + "title": "Prompt Cost" + }, + "completion_cost": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", + "title": "Completion Cost" + }, + "prompt_cost_details": { + "anyOf": [ + { + "additionalProperties": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Prompt Cost Details" + }, + "completion_cost_details": { + "anyOf": [ + { + "additionalProperties": { + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Completion Cost Details" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Provider" + } + }, + "type": "object", + "required": [ + "name", + "match_pattern", + "prompt_cost", + "completion_cost" + ], + "title": "ModelPriceMapSchema", + "description": "Model price map schema." + }, "ModelPriceMapUpdateSchema": { "properties": { "name": { @@ -59119,7 +62528,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Prompt Cost" @@ -59130,7 +62540,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Completion Cost" @@ -59144,7 +62555,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -59165,7 +62577,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ] }, @@ -59877,6 +63290,17 @@ ], "title": "Role Id" }, + "role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role Name" + }, "workspace_ids": { "anyOf": [ { @@ -59904,6 +63328,17 @@ ], "title": "Workspace Role Id" }, + "workspace_role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Workspace Role Name" + }, "password": { "anyOf": [ { @@ -59976,17 +63411,6 @@ "format": "date-time", "title": "Created At" }, - "role_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Role Name" - }, "org_role_id": { "anyOf": [ { @@ -60202,6 +63626,11 @@ "title": "Marketplace Payouts Enabled", "default": false }, + "byoc_create_saas_workspace_enabled": { + "type": "boolean", + "title": "Byoc Create Saas Workspace Enabled", + "default": true + }, "default_sso_provision": { "type": "boolean", "title": "Default Sso Provision", @@ -60402,6 +63831,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", @@ -60417,6 +63857,11 @@ "title": "Can Use Audit Logs", "default": false }, + "can_use_teams": { + "type": "boolean", + "title": "Can Use Teams", + "default": false + }, "can_add_seats": { "type": "boolean", "title": "Can Add Seats", @@ -60480,6 +63925,11 @@ "title": "Sandbox Enabled", "default": false }, + "sandbox_restricted_egress": { + "type": "boolean", + "title": "Sandbox Restricted Egress", + "default": false + }, "max_sandboxes": { "type": "integer", "title": "Max Sandboxes", @@ -60535,6 +63985,19 @@ "title": "Byoc Enabled", "default": false }, + "byoc_external_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Byoc External Id", + "description": "The organization's assigned AWS external ID for BYOC role trust policies.", + "readOnly": true + }, "byoc_max_data_planes": { "type": "integer", "title": "Byoc Max Data Planes", @@ -60550,11 +64013,6 @@ "title": "Enable Thread View Playground", "default": false }, - "enable_org_usage_charts": { - "type": "boolean", - "title": "Enable Org Usage Charts", - "default": false - }, "use_exact_search_for_prompts": { "type": "boolean", "title": "Use Exact Search For Prompts", @@ -60657,11 +64115,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", @@ -60702,6 +64155,43 @@ "title": "Agent Builder Enabled", "default": true }, + "fleet_builtin_models_enabled": { + "type": "boolean", + "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", @@ -60715,7 +64205,8 @@ "enable_burndown_vs_commit_view": { "type": "boolean", "title": "Enable Burndown Vs Commit View", - "default": false + "default": false, + "deprecated": true }, "max_agent_builder_runs": { "type": "integer", @@ -60737,15 +64228,53 @@ "title": "Llm Gateway Enabled", "default": false }, + "tuned_evals_enabled": { + "type": "boolean", + "title": "Tuned Evals Enabled", + "default": false + }, + "gateway_pii_redaction_enabled": { + "type": "boolean", + "title": "Gateway Pii Redaction Enabled", + "default": false + }, "managed_deep_agents_enabled": { "type": "boolean", "title": "Managed Deep Agents Enabled", "default": false + }, + "lmt_enabled": { + "type": "boolean", + "title": "Lmt Enabled", + "default": false + }, + "lmt_lsu_spend_limit_monthly": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "title": "Lmt Lsu Spend Limit Monthly", + "description": "Caps an org's monthly Managed Tools LSU spend, resolved from Metronome custom fields. Unset or zero blocks usage. Negative means unlimited; positive values cap monthly LSU usage. Per-org only, with no environment default." + }, + "is_anonymous": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Is Anonymous" } }, "type": "object", "title": "OrganizationConfig", - "description": "Organization level configuration. May include any field that exists in tenant config and additional fields." + "description": "Organization level configuration. May include any field that exists in tenant config and additional fields.\n\nEach field's type annotation drives how Metronome custom-field values are validated\nwhen resolving config (see smith-backend's ``_parse_metronome_value`` and smith-go's\n``rejectInvalidMetronomeValue``): a value that doesn't fit the annotated type is\ndropped and the field keeps whatever value was already resolved for it, rather than\nraising. Changing a field's type here changes what Metronome values are accepted for it." }, "OrganizationCreate": { "properties": { @@ -60838,9 +64367,25 @@ ], "title": "Display Name" }, + "avatar_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Avatar Url" + }, "config": { "$ref": "#/components/schemas/OrganizationConfig" }, + "topic_search_enabled": { + "type": "boolean", + "title": "Topic Search Enabled", + "default": false + }, "engine_enabled": { "anyOf": [ { @@ -60855,7 +64400,8 @@ "engine_lcu_spend_limit_monthly": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -60890,6 +64436,28 @@ "title": "Permissions", "default": [] }, + "org_role_name": { + "anyOf": [ + { + "$ref": "#/components/schemas/OrganizationRoles" + }, + { + "type": "null" + } + ] + }, + "org_role_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Org Role Id" + }, "disabled": { "type": "boolean", "title": "Disabled", @@ -60936,11 +64504,20 @@ "title": "Pat Creation Disabled", "default": false }, + "api_key_creation_from_api_keys_enabled": { + "type": "boolean", + "title": "Api Key Creation From Api Keys Enabled" + }, "workspace_admin_can_invite_to_org": { "type": "boolean", "title": "Workspace Admin Can Invite To Org", "default": false }, + "byoc_create_saas_workspace_enabled": { + "type": "boolean", + "title": "Byoc Create Saas Workspace Enabled", + "default": true + }, "marketplace_payouts_enabled": { "type": "boolean", "title": "Marketplace Payouts Enabled", @@ -61016,6 +64593,17 @@ ], "title": "Llm Auth Proxy Enabled" }, + "oidc_login_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Oidc Login Enabled" + }, "llm_auth_proxy_jwt_audience": { "anyOf": [ { @@ -61039,6 +64627,13 @@ "title": "Ip Allowlist Enabled", "default": false }, + "disabled_model_providers": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Disabled Model Providers" + }, "restrict_browser_secrets": { "anyOf": [ { @@ -61064,12 +64659,18 @@ ], "title": "Llm Auth Proxy Allowed Urls" }, - "engine_show_trial_modal": { - "type": "boolean", - "title": "Engine Show Trial Modal", - "default": false + "managed_evals_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Managed Evals Enabled" }, - "engine_trial_modal_seen_at": { + "managed_eval_terms_accepted_at": { "anyOf": [ { "type": "string" @@ -61078,7 +64679,7 @@ "type": "null" } ], - "title": "Engine Trial Modal Seen At" + "title": "Managed Eval Terms Accepted At" } }, "type": "object", @@ -61131,6 +64732,17 @@ "type": "string", "title": "Display Name" }, + "avatar_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Avatar Url" + }, "tier": { "anyOf": [ { @@ -61233,11 +64845,26 @@ "title": "Pat Creation Disabled", "default": false }, + "api_key_creation_from_api_keys_enabled": { + "type": "boolean", + "title": "Api Key Creation From Api Keys Enabled" + }, "workspace_admin_can_invite_to_org": { "type": "boolean", "title": "Workspace Admin Can Invite To Org", "default": false }, + "byoc_create_saas_workspace_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Byoc Create Saas Workspace Enabled" + }, "default_sso_provision": { "type": "boolean", "title": "Default Sso Provision", @@ -61303,6 +64930,17 @@ ], "title": "Llm Auth Proxy Enabled" }, + "oidc_login_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Oidc Login Enabled" + }, "llm_auth_proxy_jwt_audience": { "anyOf": [ { @@ -61328,6 +64966,20 @@ ], "title": "Ip Allowlist" }, + "disabled_model_providers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Disabled Model Providers" + }, "restrict_browser_secrets": { "anyOf": [ { @@ -61353,6 +65005,11 @@ ], "title": "Llm Auth Proxy Allowed Urls" }, + "topic_search_enabled": { + "type": "boolean", + "title": "Topic Search Enabled", + "default": false + }, "engine_enabled": { "anyOf": [ { @@ -61367,13 +65024,25 @@ "engine_lcu_spend_limit_monthly": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" } ], "title": "Engine Lcu Spend Limit Monthly" + }, + "managed_evals_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Managed Evals Enabled" } }, "type": "object", @@ -61386,6 +65055,18 @@ "title": "OrganizationPGSchemaSlim", "description": "Schema for an organization in postgres for list views." }, + "OrganizationRoles": { + "type": "string", + "enum": [ + "ORGANIZATION_ADMIN", + "ORGANIZATION_OPERATOR", + "ORGANIZATION_USER", + "ORGANIZATION_VIEWER", + "ORGANIZATION_RESTRICTED", + "CUSTOM" + ], + "title": "OrganizationRoles" + }, "OrganizationUpdate": { "properties": { "display_name": { @@ -61416,6 +65097,10 @@ ], "title": "Pat Creation Disabled" }, + "api_key_creation_from_api_keys_enabled": { + "type": "boolean", + "title": "Api Key Creation From Api Keys Enabled" + }, "unshare_all": { "anyOf": [ { @@ -61547,6 +65232,20 @@ ], "title": "Ip Allowlist" }, + "disabled_model_providers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Disabled Model Providers" + }, "restrict_browser_secrets": { "anyOf": [ { @@ -61558,6 +65257,17 @@ ], "title": "Restrict Browser Secrets" }, + "byoc_create_saas_workspace_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Byoc Create Saas Workspace Enabled" + }, "llm_auth_proxy_allowed_urls": { "anyOf": [ { @@ -61572,6 +65282,11 @@ ], "title": "Llm Auth Proxy Allowed Urls" }, + "topic_search_enabled": { + "type": "boolean", + "title": "Topic Search Enabled", + "default": false + }, "engine_enabled": { "anyOf": [ { @@ -61589,7 +65304,8 @@ "type": "number" }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -61602,21 +65318,6 @@ "title": "OrganizationUpdate", "description": "Update organization schema." }, - "OutputTokenDetails": { - "properties": { - "audio": { - "type": "integer", - "title": "Audio" - }, - "reasoning": { - "type": "integer", - "title": "Reasoning" - } - }, - "type": "object", - "title": "OutputTokenDetails", - "description": "Breakdown of output token counts.\n\nDoes *not* need to sum to full output token count. Does *not* need to have all keys.\n\nExample:\n ```python\n {\n \"audio\": 10,\n \"reasoning\": 200,\n }\n ```\n\nMay also hold extra provider-specific keys.\n\n!!! version-added \"Added in `langchain-core` 0.3.9\"" - }, "PagerdutySeverity": { "type": "string", "enum": [ @@ -61634,15 +65335,23 @@ "no_plan", "developer", "developer_01_2026", + "developer_07_2026", + "developer_10_2026", "plus", "plus_01_2026", + "plus_07_2026", + "plus_10_2026", "enterprise", "developer_legacy", "plus_legacy", "free", + "free_07_2026", + "free_10_2026", "enterprise_legacy", "startup", "startup_v0", + "startup_07_2026", + "startup_10_2026", "partner", "premier" ], @@ -61672,6 +65381,17 @@ ], "title": "Role Id" }, + "role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role Name" + }, "workspace_ids": { "anyOf": [ { @@ -61699,6 +65419,17 @@ ], "title": "Workspace Role Id" }, + "workspace_role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Workspace Role Name" + }, "password": { "anyOf": [ { @@ -61771,17 +65502,6 @@ "format": "date-time", "title": "Created At" }, - "role_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Role Name" - }, "org_role_id": { "anyOf": [ { @@ -61838,6 +65558,17 @@ ], "title": "Role Id" }, + "role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role Name" + }, "workspace_ids": { "anyOf": [ { @@ -61865,6 +65596,17 @@ ], "title": "Workspace Role Id" }, + "workspace_role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Workspace Role Name" + }, "password": { "anyOf": [ { @@ -61894,6 +65636,35 @@ ], "title": "PendingIdentityCreate" }, + "PendingIdentityPatch": { + "properties": { + "role_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Role Id" + }, + "role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role Name" + } + }, + "type": "object", + "title": "PendingIdentityPatch" + }, "PendingUpload": { "properties": { "target_cursor": { @@ -61947,141 +65718,6 @@ ], "title": "PermissionResponse" }, - "PlaygroundPromptCanvasPayload": { - "properties": { - "messages": { - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/AIMessage" - }, - { - "$ref": "#/components/schemas/HumanMessage" - }, - { - "$ref": "#/components/schemas/ChatMessage" - }, - { - "$ref": "#/components/schemas/SystemMessage" - }, - { - "$ref": "#/components/schemas/FunctionMessage" - }, - { - "$ref": "#/components/schemas/ToolMessage" - }, - { - "$ref": "#/components/schemas/AIMessageChunk" - }, - { - "$ref": "#/components/schemas/HumanMessageChunk" - }, - { - "$ref": "#/components/schemas/ChatMessageChunk" - }, - { - "$ref": "#/components/schemas/SystemMessageChunk" - }, - { - "$ref": "#/components/schemas/FunctionMessageChunk" - }, - { - "$ref": "#/components/schemas/ToolMessageChunk" - } - ] - }, - "type": "array", - "title": "Messages" - }, - "highlighted": { - "anyOf": [ - { - "$ref": "#/components/schemas/Highlight" - }, - { - "type": "null" - } - ] - }, - "artifact": { - "anyOf": [ - { - "$ref": "#/components/schemas/Artifact" - }, - { - "type": "null" - } - ] - }, - "artifact_length": { - "anyOf": [ - { - "type": "string", - "enum": [ - "shortest", - "short", - "long", - "longest" - ] - }, - { - "type": "null" - } - ], - "title": "Artifact Length" - }, - "reading_level": { - "anyOf": [ - { - "type": "string", - "enum": [ - "child", - "teenager", - "college", - "phd" - ] - }, - { - "type": "null" - } - ], - "title": "Reading Level" - }, - "custom_action": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Custom Action" - }, - "template_format": { - "type": "string", - "enum": [ - "f-string", - "mustache" - ], - "title": "Template Format" - }, - "secrets": { - "additionalProperties": { - "type": "string" - }, - "type": "object", - "title": "Secrets" - } - }, - "type": "object", - "required": [ - "messages", - "template_format", - "secrets" - ], - "title": "PlaygroundPromptCanvasPayload" - }, "PlaygroundSavedOptions": { "properties": { "requests_per_second": { @@ -62147,6 +65783,15 @@ "title": "Settings Type", "default": "complex" }, + "scope": { + "type": "string", + "enum": [ + "workspace", + "organization" + ], + "title": "Scope", + "default": "workspace" + }, "oauth_enabled": { "anyOf": [ { @@ -62280,6 +65925,18 @@ ], "title": "Name" }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, "created_at": { "type": "string", "format": "date-time", @@ -62715,6 +66372,11 @@ }, "type": "array", "title": "Session Ids" + }, + "extend_trace_retention": { + "type": "boolean", + "title": "Extend Trace Retention", + "default": false } }, "type": "object", @@ -62724,6 +66386,35 @@ ], "title": "PopulateAnnotationQueueSchema" }, + "ProblemDetails": { + "properties": { + "type": { + "type": "string", + "title": "Type" + }, + "title": { + "type": "string", + "title": "Title" + }, + "status": { + "type": "integer", + "title": "Status" + }, + "detail": { + "type": "string", + "title": "Detail" + } + }, + "type": "object", + "required": [ + "type", + "title", + "status", + "detail" + ], + "title": "ProblemDetails", + "description": "Problem details describing an error response, as defined by RFC 7807." + }, "PromptOptimizationJob": { "properties": { "id": { @@ -63018,7 +66709,8 @@ "type": "string", "minLength": 1, "format": "uri", - "title": "Url" + "title": "Url", + "description": "URL that receives a POST request with the prompt event payload." }, "headers": { "anyOf": [ @@ -63030,7 +66722,8 @@ "type": "null" } ], - "title": "Headers" + "title": "Headers", + "description": "HTTP headers sent with each request, for example an Authorization header. Values are stored encrypted and are masked in responses to callers who cannot update prompts." }, "include_prompts": { "anyOf": [ @@ -63045,7 +66738,8 @@ "type": "null" } ], - "title": "Include Prompts" + "title": "Include Prompts", + "description": "IDs of the prompts whose events fire the webhook. When empty, events from every prompt in the workspace fire it." }, "exclude_prompts": { "anyOf": [ @@ -63060,14 +66754,16 @@ "type": "null" } ], - "title": "Exclude Prompts" + "title": "Exclude Prompts", + "description": "IDs of prompts whose events never fire the webhook." }, "triggers": { "items": { "$ref": "#/components/schemas/EPromptWebhookTrigger" }, "type": "array", - "title": "Triggers" + "title": "Triggers", + "description": "Events that fire the webhook: commit (a new prompt commit), tag:create, and tag:update. A webhook with no triggers never fires." }, "id": { "type": "string", @@ -63107,7 +66803,8 @@ "type": "string", "minLength": 1, "format": "uri", - "title": "Url" + "title": "Url", + "description": "URL that receives a POST request with the prompt event payload." }, "headers": { "anyOf": [ @@ -63119,7 +66816,8 @@ "type": "null" } ], - "title": "Headers" + "title": "Headers", + "description": "HTTP headers sent with each request, for example an Authorization header. Values are stored encrypted and are masked in responses to callers who cannot update prompts." }, "include_prompts": { "anyOf": [ @@ -63134,7 +66832,8 @@ "type": "null" } ], - "title": "Include Prompts" + "title": "Include Prompts", + "description": "IDs of the prompts whose events fire the webhook. When empty, events from every prompt in the workspace fire it." }, "exclude_prompts": { "anyOf": [ @@ -63149,14 +66848,16 @@ "type": "null" } ], - "title": "Exclude Prompts" + "title": "Exclude Prompts", + "description": "IDs of prompts whose events never fire the webhook." }, "triggers": { "items": { "$ref": "#/components/schemas/EPromptWebhookTrigger" }, "type": "array", - "title": "Triggers" + "title": "Triggers", + "description": "Events that fire the webhook: commit (a new prompt commit), tag:create, and tag:update. A webhook with no triggers never fires." } }, "type": "object", @@ -63172,7 +66873,8 @@ "type": "string", "minLength": 1, "format": "uri", - "title": "Url" + "title": "Url", + "description": "URL that receives a POST request with the prompt event payload." }, "headers": { "anyOf": [ @@ -63184,7 +66886,8 @@ "type": "null" } ], - "title": "Headers" + "title": "Headers", + "description": "HTTP headers sent with each request, for example an Authorization header. Values are stored encrypted and are masked in responses to callers who cannot update prompts." }, "include_prompts": { "anyOf": [ @@ -63199,7 +66902,8 @@ "type": "null" } ], - "title": "Include Prompts" + "title": "Include Prompts", + "description": "IDs of the prompts whose events fire the webhook. When empty, events from every prompt in the workspace fire it." }, "exclude_prompts": { "anyOf": [ @@ -63214,14 +66918,16 @@ "type": "null" } ], - "title": "Exclude Prompts" + "title": "Exclude Prompts", + "description": "IDs of prompts whose events never fire the webhook." }, "triggers": { "items": { "$ref": "#/components/schemas/EPromptWebhookTrigger" }, "type": "array", - "title": "Triggers" + "title": "Triggers", + "description": "Events that fire the webhook: commit (a new prompt commit), tag:create, and tag:update. A webhook with no triggers never fires." }, "id": { "anyOf": [ @@ -63233,7 +66939,8 @@ "type": "null" } ], - "title": "Id" + "title": "Id", + "description": "ID to assign to the webhook. Generated when omitted." } }, "type": "object", @@ -63329,7 +67036,8 @@ "type": "null" } ], - "title": "Include Prompts" + "title": "Include Prompts", + "description": "IDs of the prompts whose events fire the webhook, replacing the current list. Omit to keep it." }, "exclude_prompts": { "anyOf": [ @@ -63344,7 +67052,8 @@ "type": "null" } ], - "title": "Exclude Prompts" + "title": "Exclude Prompts", + "description": "IDs of prompts whose events never fire the webhook, replacing the current list. Omit to keep it." }, "url": { "anyOf": [ @@ -63357,7 +67066,8 @@ "type": "null" } ], - "title": "Url" + "title": "Url", + "description": "URL that receives the POST requests. Omit to keep the current URL." }, "headers": { "anyOf": [ @@ -63369,7 +67079,8 @@ "type": "null" } ], - "title": "Headers" + "title": "Headers", + "description": "HTTP headers sent with each request, replacing all current headers. Omit to keep them. Masked values (********) from a read are rejected." }, "triggers": { "anyOf": [ @@ -63383,12 +67094,13 @@ "type": "null" } ], - "title": "Triggers" + "title": "Triggers", + "description": "Events that fire the webhook (commit, tag:create, tag:update), replacing the current list. Omit to keep it." } }, "type": "object", "title": "PromptWebhookUpdate", - "description": "Schema for updating a prompt webhook." + "description": "Schema for updating a prompt webhook.\n\nOmitted fields keep their current values. A list or headers value that is\nset replaces the stored value." }, "PromptimConfig": { "properties": { @@ -63697,6 +67409,28 @@ } ], "title": "Oauth Provider Id" + }, + "ls_user_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ls User Id" + }, + "agent_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Agent Id" } }, "type": "object", @@ -63817,6 +67551,42 @@ ], "title": "Source Run Id" }, + "source_session_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Session Id" + }, + "source_run_start_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Source Run Start Time" + }, + "source_trace_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Source Trace Id" + }, "metadata": { "anyOf": [ { @@ -63860,6 +67630,17 @@ ], "title": "Modified At" }, + "source_thread_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Thread Id" + }, "attachment_urls": { "anyOf": [ { @@ -64216,7 +67997,7 @@ "type": "string" }, "type": "array", - "maxItems": 100, + "maxItems": 500, "minItems": 1, "title": "Feedback Keys" }, @@ -64258,6 +68039,7 @@ "format": "uuid" }, "type": "array", + "maxItems": 10, "minItems": 1, "title": "Session Ids" }, @@ -64269,6 +68051,7 @@ }, "limit": { "type": "integer", + "maximum": 20.0, "minimum": 1.0, "title": "Limit", "default": 10 @@ -64343,6 +68126,59 @@ "title": "QueryParamsForPublicRunSchema", "description": "Query params for public run endpoints." }, + "QuerySessionFeedbackConfigIds": { + "properties": { + "session_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "maxItems": 100, + "minItems": 1, + "title": "Session Ids" + }, + "feedback_keys": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array", + "maxItems": 500 + }, + { + "type": "null" + } + ], + "title": "Feedback Keys" + }, + "cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cursor" + }, + "page_size": { + "type": "integer", + "maximum": 100.0, + "minimum": 1.0, + "title": "Page Size", + "default": 20 + } + }, + "type": "object", + "required": [ + "session_ids" + ], + "title": "QuerySessionFeedbackConfigIds", + "description": "Experiments, and optionally feedback keys, to list feedback config ids for." + }, "QueueInfoResponse": { "properties": { "queued": { @@ -64833,6 +68669,20 @@ "type": "null" } ] + }, + "owners": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/RepoOwner" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Owners" } }, "type": "object", @@ -64928,6 +68778,8 @@ "ResourceType": { "type": "string", "enum": [ + "agent", + "custom_app", "dashboard", "dataset", "deployment", @@ -64938,7 +68790,9 @@ "project", "prompt", "queue", - "sandbox" + "sandbox", + "skill", + "snapshot_name" ], "title": "ResourceType" }, @@ -65013,6 +68867,11 @@ "type": "null" } ] + }, + "is_restricted": { + "type": "boolean", + "title": "Is Restricted", + "default": false } }, "type": "object", @@ -65025,6 +68884,19 @@ ], "title": "Role" }, + "RoleRestrictionUpdate": { + "properties": { + "is_restricted": { + "type": "boolean", + "title": "Is Restricted" + } + }, + "type": "object", + "required": [ + "is_restricted" + ], + "title": "RoleRestrictionUpdate" + }, "RootModel_Dict_str__list_str___": { "additionalProperties": { "items": { @@ -65114,6 +68986,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", @@ -65419,7 +69303,7 @@ "created_at" ], "title": "RunClusteringJobPydantic", - "description": "Session cluster job" + "description": "An Insights job." }, "RunDateOrder": { "type": "string", @@ -66208,7 +70092,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -66219,7 +70104,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -66230,7 +70116,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -66242,7 +70129,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -66256,7 +70144,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -66698,7 +70587,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -66709,7 +70599,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -66720,7 +70611,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -66732,7 +70624,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -66746,7 +70639,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -66816,7 +70710,8 @@ "exclusiveMinimum": 0.0 }, { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" } ], "title": "Limit Usd" @@ -66836,6 +70731,7 @@ "properties": { "limit_usd": { "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$", "title": "Limit Usd" }, "window": { @@ -66969,6 +70865,49 @@ "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", + "default": false + }, + "extend_dataset_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Dataset Trace Retention" + }, + "extend_annotation_queue_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Annotation Queue Trace Retention" + }, + "extend_webhook_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Webhook Trace Retention" + }, "transient": { "type": "boolean", "title": "Transient", @@ -67096,7 +71035,10 @@ "anyOf": [ { "type": "string", - "const": "thread_id" + "enum": [ + "thread_id", + "trajectory_id" + ] }, { "type": "null" @@ -67424,6 +71366,60 @@ "title": "Extend Only", "default": false }, + "is_managed_evaluator": { + "type": "boolean", + "title": "Is Managed Evaluator", + "default": false + }, + "is_tracing_disabled": { + "type": "boolean", + "title": "Is Tracing Disabled", + "default": false + }, + "extend_evaluator_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Evaluator Trace Retention" + }, + "extend_dataset_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Dataset Trace Retention" + }, + "extend_annotation_queue_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Annotation Queue Trace Retention" + }, + "extend_webhook_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Webhook Trace Retention" + }, "include_extended_stats": { "type": "boolean", "title": "Include Extended Stats", @@ -67529,6 +71525,17 @@ ], "title": "Evaluator Id" }, + "evaluator_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Evaluator Name" + }, "alignment_annotation_queue_id": { "anyOf": [ { @@ -67545,7 +71552,10 @@ "anyOf": [ { "type": "string", - "const": "thread_id" + "enum": [ + "thread_id", + "trajectory_id" + ] }, { "type": "null" @@ -67705,6 +71715,61 @@ "title": "Extend Only", "default": false }, + "is_tracing_disabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Is Tracing Disabled" + }, + "extend_evaluator_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Evaluator Trace Retention" + }, + "extend_dataset_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Dataset Trace Retention" + }, + "extend_annotation_queue_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Annotation Queue Trace Retention" + }, + "extend_webhook_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Webhook Trace Retention" + }, "transient": { "type": "boolean", "title": "Transient", @@ -67832,7 +71897,10 @@ "anyOf": [ { "type": "string", - "const": "thread_id" + "enum": [ + "thread_id", + "trajectory_id" + ] }, { "type": "null" @@ -67963,6 +72031,49 @@ "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", + "default": false + }, + "extend_dataset_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Dataset Trace Retention" + }, + "extend_annotation_queue_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Annotation Queue Trace Retention" + }, + "extend_webhook_trace_retention": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Extend Webhook Trace Retention" + }, "transient": { "type": "boolean", "title": "Transient", @@ -68090,7 +72201,10 @@ "anyOf": [ { "type": "string", - "const": "thread_id" + "enum": [ + "thread_id", + "trajectory_id" + ] }, { "type": "null" @@ -68167,6 +72281,22 @@ } ], "title": "Test Attachments" + }, + "test_thread_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Test Thread Id" + }, + "validate_project_compatibility": { + "type": "boolean", + "title": "Validate Project Compatibility", + "default": false } }, "type": "object", @@ -68175,7 +72305,7 @@ "sampling_rate" ], "title": "RunRulesValidateSchema", - "description": "Schema for validating rules without creating them.\n\nExtends RunRulesCreateSchema with test data fields for validation.\nOnly LLM-as-judge rules (evaluators) are supported, not code_evaluators." + "description": "Schema for validating rules without creating them.\n\nExtends RunRulesCreateSchema with test data fields for validation.\nOnly LLM-as-judge rules (evaluators) are supported, not code_evaluators.\n\nFor trace-level evaluators, provide test_inputs / test_outputs.\nFor thread evaluators (group_by=\"thread_id\"), provide test_thread_id +\nsession_id instead; the backend fetches and assembles all turns automatically." }, "RunRulesWebhookSchema": { "properties": { @@ -68578,7 +72708,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -68589,7 +72720,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -68600,7 +72732,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -68612,7 +72745,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -68626,7 +72760,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -69104,10 +73239,23 @@ ], "title": "Completion Tokens" }, + "first_token_time": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "First Token Time" + }, "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -69118,7 +73266,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -69129,7 +73278,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -69554,7 +73704,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -69565,7 +73716,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -69576,7 +73728,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -69588,7 +73741,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -69602,7 +73756,8 @@ "anyOf": [ { "additionalProperties": { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, "type": "object" }, @@ -69917,6 +74072,11 @@ "format": "uuid", "title": "Run Id" }, + "shared_trace_id": { + "type": "string", + "format": "uuid", + "title": "Shared Trace Id" + }, "share_token": { "type": "string", "format": "uuid", @@ -69926,6 +74086,7 @@ "type": "object", "required": [ "run_id", + "shared_trace_id", "share_token" ], "title": "RunShareSchema" @@ -70368,7 +74529,294 @@ "type": "null" } ], - "title": "Trace" + "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": [ + { + "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": [ @@ -70606,11 +75054,28 @@ } ], "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", - "title": "RunStatsQueryParams", - "description": "Query params for run stats." + "title": "RunStatsQueryParamsPublic", + "description": "Query params for run stats on a shared dataset." }, "RunStatsSelect": { "type": "string", @@ -70644,6 +75109,7 @@ "session_feedback_stats", "all_run_stats", "all_token_stats", + "group_count", "prompt_token_details", "completion_token_details", "prompt_cost_details", @@ -70817,6 +75283,11 @@ "format": "uuid", "title": "Provider Id" }, + "provider_type": { + "$ref": "#/components/schemas/SSOProviderType", + "default": "saml", + "x-extensible-enum": true + }, "default_workspace_role_id": { "type": "string", "format": "uuid", @@ -70852,6 +75323,42 @@ ], "title": "Metadata Xml" }, + "oidc_issuer_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Oidc Issuer Url" + }, + "oidc_client_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Oidc Client Id" + }, + "oidc_scopes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Oidc Scopes" + }, + "oidc_claim_mapping": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Oidc Claim Mapping" + }, "sso_groups_enabled": { "type": "boolean", "title": "Sso Groups Enabled", @@ -70919,6 +75426,11 @@ "organization_display_name": { "type": "string", "title": "Organization Display Name" + }, + "provider_type": { + "$ref": "#/components/schemas/SSOProviderType", + "default": "saml", + "x-extensible-enum": true } }, "type": "object", @@ -70929,6 +75441,14 @@ ], "title": "SSOProviderSlim" }, + "SSOProviderType": { + "type": "string", + "enum": [ + "saml", + "oidc" + ], + "title": "SSOProviderType" + }, "SSOSettingsCreate": { "properties": { "default_workspace_role_id": { @@ -71292,20 +75812,136 @@ "model" ], "title": "SavedRunClusteringJobRequest", - "description": "Request to create a run clustering job." + "description": "Saved configuration for an Insights job." }, - "SecretKey": { + "SecretConfig": { "properties": { - "key": { + "host_pattern": { "type": "string", - "title": "Key" + "title": "Host Pattern", + "description": "Exact host or a leading '*.' wildcard, e.g. 'api.openai.com'." + }, + "header_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Header Name", + "description": "HTTP header the secret is sent in. Null leaves it to the consumer." + }, + "header_value_template": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Header Value Template", + "description": "Header value with '{value}' replaced by the secret, e.g. 'Bearer {value}'. Null sends the raw secret." + }, + "id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Id", + "description": "Omitted for a built-in default." + }, + "source": { + "$ref": "#/components/schemas/SecretConfigSource" + }, + "created_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Created At", + "description": "Omitted for a built-in default." + }, + "updated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Updated At", + "description": "Omitted for a built-in default." } }, "type": "object", "required": [ - "key" + "host_pattern", + "source" + ], + "title": "SecretConfig" + }, + "SecretConfigInput": { + "properties": { + "host_pattern": { + "type": "string", + "title": "Host Pattern", + "description": "Exact host or a leading '*.' wildcard, e.g. 'api.openai.com'." + }, + "header_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Header Name", + "description": "HTTP header the secret is sent in. Null leaves it to the consumer." + }, + "header_value_template": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Header Value Template", + "description": "Header value with '{value}' replaced by the secret, e.g. 'Bearer {value}'. Null sends the raw secret." + } + }, + "type": "object", + "required": [ + "host_pattern" + ], + "title": "SecretConfigInput", + "description": "A host a workspace secret may be sent to, and how it is sent." + }, + "SecretConfigSource": { + "type": "string", + "enum": [ + "DEFAULT", + "CUSTOM" ], - "title": "SecretKey" + "title": "SecretConfigSource", + "description": "Whether a secret config comes from the built-in catalog or an admin." }, "SecretUpsert": { "properties": { @@ -71535,6 +76171,73 @@ ], "title": "ServiceAccountWorkspaceAssignment" }, + "SessionFeedbackConfigIds": { + "properties": { + "session_id": { + "type": "string", + "format": "uuid", + "title": "Session Id" + }, + "feedback_key": { + "type": "string", + "title": "Feedback Key" + }, + "is_session_level": { + "type": "boolean", + "title": "Is Session Level" + }, + "feedback_config_ids": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "title": "Feedback Config Ids" + }, + "has_scores_without_config": { + "type": "boolean", + "title": "Has Scores Without Config" + } + }, + "type": "object", + "required": [ + "session_id", + "feedback_key", + "is_session_level", + "feedback_config_ids", + "has_scores_without_config" + ], + "title": "SessionFeedbackConfigIds", + "description": "The feedback configs an experiment's scores for one key were written against." + }, + "SessionFeedbackConfigIdsPage": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/SessionFeedbackConfigIds" + }, + "type": "array", + "title": "Items" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + } + }, + "type": "object", + "required": [ + "items", + "next_cursor" + ], + "title": "SessionFeedbackConfigIdsPage" + }, "SessionFeedbackDelta": { "properties": { "feedback_deltas": { @@ -71564,8 +76267,7 @@ "latency_p50", "latency_p99", "error_rate", - "feedback", - "runs_count" + "feedback" ], "title": "SessionSortableColumns" }, @@ -71603,6 +76305,25 @@ "description": "Simple experiment info schema for use with comparative experiments" }, "SingleCustomChartResponse": { + "$ref": "#/components/schemas/SingleCustomChartResponseSerialized" + }, + "SingleCustomChartResponseBase": { + "properties": { + "data": { + "items": { + "$ref": "#/components/schemas/CustomChartsDataPoint" + }, + "type": "array", + "title": "Data" + } + }, + "type": "object", + "required": [ + "data" + ], + "title": "SingleCustomChartResponseBase" + }, + "SingleCustomChartResponseSerialized": { "properties": { "data": { "items": { @@ -71655,11 +76376,20 @@ "title": "Index" }, "chart_type": { - "$ref": "#/components/schemas/CustomChartType" + "type": "string", + "enum": [ + "line", + "bar", + "table", + "kpi", + "top-k", + "pie" + ], + "title": "Chart Type" }, "series": { "items": { - "$ref": "#/components/schemas/CustomChartSeries" + "$ref": "#/components/schemas/CustomChartSeries-Output" }, "type": "array", "title": "Series" @@ -71684,23 +76414,7 @@ "chart_type", "series" ], - "title": "SingleCustomChartResponse" - }, - "SingleCustomChartResponseBase": { - "properties": { - "data": { - "items": { - "$ref": "#/components/schemas/CustomChartsDataPoint" - }, - "type": "array", - "title": "Data" - } - }, - "type": "object", - "required": [ - "data" - ], - "title": "SingleCustomChartResponseBase" + "title": "SingleCustomChartResponseSerialized" }, "SingleCustomChartSubSectionResponse": { "properties": { @@ -71807,19 +76521,6 @@ "title": "SourceType", "description": "Enum for feedback source types." }, - "StripeAccountLinksCreate": { - "properties": { - "success_path": { - "type": "string", - "title": "Success Path" - } - }, - "type": "object", - "required": [ - "success_path" - ], - "title": "StripeAccountLinksCreate" - }, "StripeBusinessBillingInfo": { "properties": { "name": { @@ -72207,148 +76908,6 @@ "title": "SupabaseAttributeMappingKey", "description": "Single entry in a Supabase SAML attribute_mapping.keys map." }, - "SystemMessage": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "system", - "title": "Type", - "default": "system" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content" - ], - "title": "SystemMessage", - "description": "Message for priming AI behavior.\n\nThe system message is usually passed in as the first of a sequence\nof input messages.\n\nExample:\n ```python\n from langchain_core.messages import HumanMessage, SystemMessage\n\n messages = [\n SystemMessage(content=\"You are a helpful assistant! Your name is Bob.\"),\n HumanMessage(content=\"What is your name?\"),\n ]\n\n # Define a chat model and invoke it with the messages\n print(model.invoke(messages))\n ```" - }, - "SystemMessageChunk": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "SystemMessageChunk", - "title": "Type", - "default": "SystemMessageChunk" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content" - ], - "title": "SystemMessageChunk", - "description": "System Message chunk." - }, "TTLSettings": { "properties": { "tenant_id": { @@ -72863,6 +77422,14 @@ }, "TaggingsByResourceType": { "properties": { + "agents": { + "items": { + "$ref": "#/components/schemas/Resource" + }, + "type": "array", + "title": "Agents", + "default": [] + }, "alerts": { "items": { "$ref": "#/components/schemas/Resource" @@ -72871,6 +77438,14 @@ "title": "Alerts", "default": [] }, + "custom_apps": { + "items": { + "$ref": "#/components/schemas/Resource" + }, + "type": "array", + "title": "Custom Apps", + "default": [] + }, "dashboards": { "items": { "$ref": "#/components/schemas/Resource" @@ -72950,6 +77525,22 @@ "type": "array", "title": "Sandboxes", "default": [] + }, + "skills": { + "items": { + "$ref": "#/components/schemas/Resource" + }, + "type": "array", + "title": "Skills", + "default": [] + }, + "snapshot_names": { + "items": { + "$ref": "#/components/schemas/Resource" + }, + "type": "array", + "title": "Snapshot Names", + "default": [] } }, "type": "object", @@ -73318,6 +77909,53 @@ ], "title": "TenantShareRunToken" }, + "TenantShareThreadToken": { + "properties": { + "type": { + "type": "string", + "const": "thread", + "title": "Type" + }, + "share_token": { + "type": "string", + "title": "Share Token" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "thread_id": { + "type": "string", + "title": "Thread Id" + }, + "session_id": { + "type": "string", + "format": "uuid", + "title": "Session Id" + }, + "session_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Session Name" + } + }, + "type": "object", + "required": [ + "type", + "share_token", + "created_at", + "thread_id", + "session_id" + ], + "title": "TenantShareThreadToken" + }, "TenantShareTokensResponse": { "properties": { "entities": { @@ -73328,13 +77966,17 @@ }, { "$ref": "#/components/schemas/TenantShareDatasetToken" + }, + { + "$ref": "#/components/schemas/TenantShareThreadToken" } ], "discriminator": { "propertyName": "type", "mapping": { "dataset": "#/components/schemas/TenantShareDatasetToken", - "run": "#/components/schemas/TenantShareRunToken" + "run": "#/components/schemas/TenantShareRunToken", + "thread": "#/components/schemas/TenantShareThreadToken" } } }, @@ -73382,6 +78024,10 @@ "evaluator_count": { "type": "integer", "title": "Evaluator Count" + }, + "custom_app_count": { + "type": "integer", + "title": "Custom App Count" } }, "type": "object", @@ -73393,7 +78039,8 @@ "annotation_queue_count", "deployment_count", "dashboards_count", - "evaluator_count" + "evaluator_count", + "custom_app_count" ], "title": "TenantStats", "description": "Stats for a tenant." @@ -73503,281 +78150,6 @@ "title": "TimedeltaInput", "description": "Timedelta input." }, - "ToolCall": { - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "args": { - "additionalProperties": true, - "type": "object", - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "type": { - "type": "string", - "const": "tool_call", - "title": "Type" - } - }, - "type": "object", - "required": [ - "name", - "args", - "id" - ], - "title": "ToolCall", - "description": "Represents an AI's request to call a tool.\n\nExample:\n ```python\n {\"name\": \"foo\", \"args\": {\"a\": 1}, \"id\": \"123\"}\n ```\n\n This represents a request to call the tool named `'foo'` with arguments\n `{\"a\": 1}` and an identifier of `'123'`.\n\n!!! note \"Factory function\"\n\n `tool_call` may also be used as a factory to create a `ToolCall`. Benefits\n include:\n\n * Required arguments strictly validated at creation time" - }, - "ToolCallChunk": { - "properties": { - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "args": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Args" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "index": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "title": "Index" - }, - "type": { - "type": "string", - "const": "tool_call_chunk", - "title": "Type" - } - }, - "type": "object", - "required": [ - "name", - "args", - "id", - "index" - ], - "title": "ToolCallChunk", - "description": "A chunk of a tool call (yielded when streaming).\n\nWhen merging `ToolCallChunk` objects (e.g., via `AIMessageChunk.__add__`), all\nstring attributes are concatenated. Chunks are only merged if their values of\n`index` are equal and not `None`.\n\nExample:\n```python\nleft_chunks = [ToolCallChunk(name=\"foo\", args='{\"a\":', index=0)]\nright_chunks = [ToolCallChunk(name=None, args=\"1}\", index=0)]\n\n(\n AIMessageChunk(content=\"\", tool_call_chunks=left_chunks)\n + AIMessageChunk(content=\"\", tool_call_chunks=right_chunks)\n).tool_call_chunks == [ToolCallChunk(name=\"foo\", args='{\"a\":1}', index=0)]\n```" - }, - "ToolMessage": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "tool", - "title": "Type", - "default": "tool" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "tool_call_id": { - "type": "string", - "title": "Tool Call Id" - }, - "artifact": { - "title": "Artifact" - }, - "status": { - "type": "string", - "enum": [ - "success", - "error" - ], - "title": "Status", - "default": "success" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content", - "tool_call_id" - ], - "title": "ToolMessage", - "description": "Message for passing the result of executing a tool back to a model.\n\n`ToolMessage` objects contain the result of a tool invocation. Typically, the result\nis encoded inside the `content` field.\n\n`tool_call_id` is used to associate the tool call request with the tool call\nresponse. Useful in situations where a chat model is able to request multiple tool\ncalls in parallel.\n\nExample:\n A `ToolMessage` representing a result of `42` from a tool call with id\n\n ```python\n from langchain_core.messages import ToolMessage\n\n ToolMessage(content=\"42\", tool_call_id=\"call_Jja7J89XsjrOLA5r!MEOW!SL\")\n ```\n\nExample:\n A `ToolMessage` where only part of the tool output is sent to the model\n and the full output is passed in to artifact.\n\n ```python\n from langchain_core.messages import ToolMessage\n\n tool_output = {\n \"stdout\": \"From the graph we can see that the correlation between \"\n \"x and y is ...\",\n \"stderr\": None,\n \"artifacts\": {\"type\": \"image\", \"base64_data\": \"/9j/4gIcSU...\"},\n }\n\n ToolMessage(\n content=tool_output[\"stdout\"],\n artifact=tool_output,\n tool_call_id=\"call_Jja7J89XsjrOLA5r!MEOW!SL\",\n )\n ```" - }, - "ToolMessageChunk": { - "properties": { - "content": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "additionalProperties": true, - "type": "object" - } - ] - }, - "type": "array" - } - ], - "title": "Content" - }, - "additional_kwargs": { - "additionalProperties": true, - "type": "object", - "title": "Additional Kwargs" - }, - "response_metadata": { - "additionalProperties": true, - "type": "object", - "title": "Response Metadata" - }, - "type": { - "type": "string", - "const": "ToolMessageChunk", - "title": "Type", - "default": "ToolMessageChunk" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Name" - }, - "id": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "Id" - }, - "tool_call_id": { - "type": "string", - "title": "Tool Call Id" - }, - "artifact": { - "title": "Artifact" - }, - "status": { - "type": "string", - "enum": [ - "success", - "error" - ], - "title": "Status", - "default": "success" - } - }, - "additionalProperties": true, - "type": "object", - "required": [ - "content", - "tool_call_id" - ], - "title": "ToolMessageChunk", - "description": "Tool Message chunk." - }, "TraceTier": { "type": "string", "enum": [ @@ -73962,7 +78334,8 @@ "total_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -73973,7 +78346,8 @@ "prompt_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -73984,7 +78358,8 @@ "completion_cost": { "anyOf": [ { - "type": "string" + "type": "string", + "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$" }, { "type": "null" @@ -74114,6 +78489,22 @@ }, "TracerSessionCreate": { "properties": { + "tag_value_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "maxItems": 100 + }, + { + "type": "null" + } + ], + "title": "Tag Value Ids" + }, "start_time": { "type": "string", "format": "date-time", @@ -74204,22 +78595,6 @@ ], "title": "Id" }, - "tag_value_ids": { - "anyOf": [ - { - "items": { - "type": "string", - "format": "uuid" - }, - "type": "array", - "maxItems": 100 - }, - { - "type": "null" - } - ], - "title": "Tag Value Ids" - }, "num_examples": { "anyOf": [ { @@ -74458,6 +78833,70 @@ "title": "TracerSessionWithoutVirtualFields", "description": "TracerSession schema." }, + "TracingKeyCreateRequest": { + "properties": { + "description": { + "type": "string", + "title": "Description", + "default": "Tracing key" + }, + "workspaces": { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array", + "minItems": 1, + "title": "Workspaces" + }, + "expires_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Expires At" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "workspaces" + ], + "title": "TracingKeyCreateRequest" + }, + "TracingKeyListResponse": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/APIKeyGetResponse" + }, + "type": "array", + "title": "Items" + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next Cursor" + } + }, + "type": "object", + "required": [ + "items", + "next_cursor" + ], + "title": "TracingKeyListResponse" + }, "TriggerRulesRequest": { "properties": { "rule_ids": { @@ -74548,10 +78987,22 @@ }, "type": "object", "title": "UpdateClusteringJobConfigRequest", - "description": "Request to update a clustering job config." + "description": "Request to update an Insights job configuration." }, "UpdateFeedbackConfigSchema": { "properties": { + "id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Id" + }, "feedback_key": { "type": "string", "title": "Feedback Key" @@ -74699,7 +79150,7 @@ "name" ], "title": "UpdateRunClusteringJobRequest", - "description": "Request to update a session cluster job." + "description": "Request to update an Insights job." }, "UpdateRunClusteringJobResponse": { "properties": { @@ -74718,7 +79169,7 @@ "status" ], "title": "UpdateRunClusteringJobResponse", - "description": "Response to update a session cluster job." + "description": "Response to updating an Insights job." }, "UpsertTTLSettingsRequest": { "properties": { @@ -74763,6 +79214,34 @@ "type": "string", "format": "uuid", "title": "Id" + }, + "scope": { + "$ref": "#/components/schemas/UsageLimitScope", + "default": "workspace" + }, + "session_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Session Id" + }, + "identity_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Identity Id" } }, "type": "object", @@ -74787,6 +79266,34 @@ "format": "uuid", "title": "Id" }, + "scope": { + "$ref": "#/components/schemas/UsageLimitScope", + "default": "workspace" + }, + "session_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Session Id" + }, + "identity_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Identity Id" + }, "tenant_id": { "type": "string", "format": "uuid", @@ -74814,6 +79321,16 @@ "title": "UsageLimit", "description": "Usage limit model." }, + "UsageLimitScope": { + "type": "string", + "enum": [ + "workspace", + "project", + "user" + ], + "title": "UsageLimitScope", + "description": "Granularity a limit applies to within a tenant." + }, "UsageLimitType": { "type": "string", "enum": [ @@ -74823,36 +79340,6 @@ "title": "UsageLimitType", "description": "Type of usage limit." }, - "UsageMetadata": { - "properties": { - "input_tokens": { - "type": "integer", - "title": "Input Tokens" - }, - "output_tokens": { - "type": "integer", - "title": "Output Tokens" - }, - "total_tokens": { - "type": "integer", - "title": "Total Tokens" - }, - "input_token_details": { - "$ref": "#/components/schemas/InputTokenDetails" - }, - "output_token_details": { - "$ref": "#/components/schemas/OutputTokenDetails" - } - }, - "type": "object", - "required": [ - "input_tokens", - "output_tokens", - "total_tokens" - ], - "title": "UsageMetadata", - "description": "Usage metadata for a message, such as token counts.\n\nThis is a standard representation of token usage that is consistent across models.\n\nExample:\n ```python\n {\n \"input_tokens\": 350,\n \"output_tokens\": 240,\n \"total_tokens\": 590,\n \"input_token_details\": {\n \"audio\": 10,\n \"cache_creation\": 200,\n \"cache_read\": 100,\n },\n \"output_token_details\": {\n \"audio\": 10,\n \"reasoning\": 200,\n },\n }\n ```\n\n!!! warning \"Behavior changed in `langchain-core` 0.3.9\"\n\n Added `input_token_details` and `output_token_details`.\n\n!!! note \"LangSmith SDK\"\n\n The LangSmith SDK also has a `UsageMetadata` class. While the two share fields,\n LangSmith's `UsageMetadata` has additional fields to capture cost information\n used by the LangSmith platform." - }, "UserOnboardingStateResponse": { "properties": { "id": { @@ -74925,6 +79412,18 @@ ], "title": "Success Viewed At" }, + "agent_platform_welcome_viewed_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Agent Platform Welcome Viewed At" + }, "created_at": { "type": "string", "format": "date-time", @@ -75038,6 +79537,13 @@ "type": { "type": "string", "title": "Error Type" + }, + "input": { + "title": "Input" + }, + "ctx": { + "type": "object", + "title": "Context" } }, "type": "object", @@ -75070,31 +79576,277 @@ "type": "null" } ], - "title": "Tenant Handle" - } - }, - "type": "object", - "required": [ - "display_name" - ], - "title": "WorkspaceCreate", - "description": "Creation model for the workspace." - }, - "WorkspacePatch": { - "properties": { - "display_name": { - "type": "string", - "minLength": 1, - "pattern": "^[a-zA-Z0-9\\-_ '@()]+$", - "title": "Display Name" + "title": "Tenant Handle" + } + }, + "type": "object", + "required": [ + "display_name" + ], + "title": "WorkspaceCreate", + "description": "Creation model for the workspace." + }, + "WorkspaceInviteResult": { + "properties": { + "email": { + "type": "string", + "title": "Email" + }, + "read_only": { + "type": "boolean", + "title": "Read Only", + "default": false, + "deprecated": true + }, + "role_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Role Id" + }, + "role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role Name" + }, + "workspace_ids": { + "anyOf": [ + { + "items": { + "type": "string", + "format": "uuid" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Workspace Ids" + }, + "workspace_role_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Workspace Role Id" + }, + "workspace_role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Workspace Role Name" + }, + "password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Password" + }, + "full_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Full Name" + }, + "access_scope": { + "$ref": "#/components/schemas/AccessScope", + "default": "workspace" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Id" + }, + "user_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "User Id" + }, + "tenant_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Tenant Id" + }, + "organization_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Organization Id" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "org_role_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Org Role Id" + }, + "org_role_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Org Role Name" + }, + "ls_user_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ], + "title": "Ls User Id" + } + }, + "type": "object", + "required": [ + "email", + "id", + "created_at" + ], + "title": "WorkspaceInviteResult", + "description": "Response type for the batch workspace invite endpoint.\n\nExtends PendingIdentity so existing clients continue to work. When the\ninvitee was already an active org member, ``ls_user_id`` is populated\nand ``email`` is filled from the request payload." + }, + "WorkspacePatch": { + "properties": { + "display_name": { + "type": "string", + "minLength": 1, + "pattern": "^[a-zA-Z0-9\\-_ '@()]+$", + "title": "Display Name" + } + }, + "type": "object", + "required": [ + "display_name" + ], + "title": "WorkspacePatch", + "description": "Patch model for the workspace." + }, + "WorkspaceSecret": { + "properties": { + "key": { + "type": "string", + "title": "Key" + }, + "configs": { + "items": { + "$ref": "#/components/schemas/SecretConfig" + }, + "type": "array", + "title": "Configs", + "description": "Hosts the secret may be sent to, with built-in defaults applied. Listed secrets include it only when include_configs is true." + } + }, + "type": "object", + "required": [ + "key" + ], + "title": "WorkspaceSecret", + "description": "A workspace secret's key and the hosts it may be sent to. Never the value." + }, + "WorkspaceSecretUpsert": { + "properties": { + "value": { + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Value", + "description": "Secret value. Required to create a secret; omit to keep the current value." + }, + "configs": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SecretConfigInput" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Configs", + "description": "Full replacement of the allowed hosts. Omitted or empty removes custom hosts so the built-in defaults, if any, apply." } }, "type": "object", - "required": [ - "display_name" - ], - "title": "WorkspacePatch", - "description": "Patch model for the workspace." + "title": "WorkspaceSecretUpsert" }, "_SSOEmailLookupRequest": { "properties": { @@ -75215,739 +79967,451 @@ "title": "Tenant", "description": "Tenant schema." }, - "abac.ErrorResponse": { + "addresses.ResolveResponse": { "type": "object", + "required": [ + "session_id" + ], "properties": { - "error": { + "session_id": { + "description": "`session_id` is the tracing project (session) the address names.", "type": "string", - "example": "Invalid request: missing required fields" - } - } - }, - "agent_builder_webhooks.WebhookTestResult": { - "type": "object", - "properties": { - "upstream_body": { - "type": "string" - }, - "upstream_content_type": { - "type": "string" - }, - "upstream_status_code": { - "type": "integer" + "format": "uuid" } } }, - "agents.Agent": { + "agent.CreateIssuesAgentRequest": { "type": "object", "properties": { - "access_level": { + "analysis_level": { + "description": "AnalysisLevel is how thoroughly Engine monitors the project: \"standard\"\n(the default), \"reduced\" (fewer traces at lower cost), or \"expanded\" (more\ntraces per run, for projects with enough tracing volume). Omit for\n\"standard\".", "type": "string", "enum": [ - "READ", - "RUN", - "WRITE" + "standard", + "reduced", + "expanded" ] }, - "backend": { - "$ref": "#/components/schemas/agents.AgentBackend" - }, - "created_at": { - "type": "string", - "format": "date-time" + "auto_open_fix_pr": { + "description": "AutoOpenFixPR opens a pull request for every fix the agent\nproduces — one per repository it changed — instead of waiting for one to\nbe opened from the issue. Has no effect until the board tracks a\nrepository, since a fix has nowhere to open. Omit for false.", + "type": "boolean" }, - "description": { + "context_hub_repo_handle": { "type": "string" }, - "display": { - "$ref": "#/components/schemas/agents.AgentDisplay" - }, - "extras": { - "type": "object", - "additionalProperties": {} - }, - "files": { - "description": "Raw file map. Returned only when `include_files=true`.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/agents.FileEntry" - } - }, - "id": { - "type": "string", - "format": "uuid" - }, - "instructions": { - "description": "Deprecated: use `system_prompt`. Echoed alongside `system_prompt` with\nthe same value for backwards compatibility.", + "github_base_branch": { + "description": "Legacy: applies to the repo github_repo_url names.", "type": "string" }, - "is_owner": { - "type": "boolean" - }, - "model": { - "$ref": "#/components/schemas/agents.AgentModel" - }, - "name": { + "github_repo_subdir": { + "description": "Legacy: applies to the repo github_repo_url names.", "type": "string" }, - "options": { - "$ref": "#/components/schemas/agents.AgentOptions" - }, - "owner_id": { - "type": "string", - "format": "uuid" - }, - "permissions": { - "$ref": "#/components/schemas/agents.AgentPermissions" - }, - "revision": { + "github_repo_url": { + "description": "Legacy: treated as a one-entry github_repos list.", "type": "string" }, - "subagents": { - "description": "Subagents parsed from `subagents//AGENTS.md` + `subagents//tools.json`.", + "github_repos": { + "description": "Created with the board. Wins over the deprecated fields below.", "type": "array", "items": { - "$ref": "#/components/schemas/agents.SubagentSpec" + "$ref": "#/components/schemas/agent.GithubRepoInput" } }, - "system_prompt": { - "description": "Agent system prompt parsed from `AGENTS.md`.", - "type": "string" - }, - "tools": { - "description": "Tool config parsed from `tools.json`.", - "allOf": [ - { - "$ref": "#/components/schemas/agents.ToolsConfig" - } - ] + "priorities": { + "type": "array", + "items": { + "type": "string" + } }, - "updated_at": { - "type": "string", - "format": "date-time" + "run_filter": { + "description": "Runs-filter-DSL trace scope; omit/null/empty for no scope.", + "type": "string" } } }, - "agents.AgentBackend": { + "agent.ErrorResponse": { "type": "object", "properties": { - "sandbox_config": { - "description": "Sandbox configuration. Required when `type` is `sandbox`, rejected otherwise.", - "allOf": [ - { - "$ref": "#/components/schemas/agents.SandboxConfig" - } - ] - }, - "type": { - "description": "Execution backend. Defaults to `state` when omitted (along with the whole\n`backend` object). `state` runs without a sandbox: files live in LangGraph\nthread state, which is thread-scoped — they persist across turns within a\nthread but are not shared across threads. `sandbox` provisions an isolated\ncomputer.", - "type": "string", - "enum": [ - "state", - "sandbox" - ], - "example": "sandbox" + "error": { + "type": "string" } } }, - "agents.AgentDisplay": { + "agent.GithubRepo": { "type": "object", "properties": { - "icon": { - "type": "string", - "example": "Rocket02" + "base_branch": { + "type": "string" }, - "icon_color": { - "type": "string", - "example": "blue" - } - } - }, - "agents.AgentModel": { - "type": "object", - "properties": { - "id": { - "description": "Model id from GET /v1/fleet/models. Built-in ids are `provider:model`\n(e.g. anthropic:claude-sonnet-4-6); workspace (custom) models use the\nworkspace model id.", + "created_at": { "type": "string", - "example": "anthropic:claude-sonnet-4-6" - } - } - }, - "agents.AgentOptions": { - "type": "object", - "properties": { - "skip_memory_write_protection": { - "description": "Internal. Disables the human approval interrupt before memory writes.", - "type": "boolean" + "format": "date-time" }, - "slack_oauth_provider_id": { - "description": "Internal. Slack OAuth provider the agent posts replies as.", + "id": { "type": "string" }, - "tools_url": { - "description": "Internal. MCP tool server the agent connects to; defaults to the platform server when empty.", + "repo_url": { "type": "string" }, - "trace_inputs_outputs": { - "description": "Whether the agent records run inputs/outputs to its tracing project.", - "type": "boolean" + "subdir": { + "type": "string" }, - "triggers_paused": { - "description": "Internal. Not needed.", - "type": "boolean" + "updated_at": { + "type": "string", + "format": "date-time" } } }, - "agents.AgentPermissions": { + "agent.GithubRepoInput": { "type": "object", "properties": { - "identity": { - "type": "string", - "enum": [ - "personal", - "shared" - ] - }, - "shared_users": { - "$ref": "#/components/schemas/agents.SharedUsers" + "base_branch": { + "type": "string" }, - "tenant_access_level": { - "type": "string", - "enum": [ - "read", - "run", - "write" - ] + "repo_url": { + "type": "string" }, - "visibility": { - "type": "string", - "enum": [ - "tenant", - "user" - ] + "subdir": { + "type": "string" } } }, - "agents.AgentSummary": { + "agent.IssuesAgent": { "type": "object", "properties": { - "access_level": { + "agent_overview_accepted": { + "type": "boolean" + }, + "analysis_level": { + "description": "AnalysisLevel controls coverage vs cost: \"standard\" (default), \"reduced\"\n(one scan a day, fewer traces per scan), or \"expanded\" (2x traces per\nrun). Stored NULL in the DB means standard; reads always return a\nconcrete value.", "type": "string", "enum": [ - "READ", - "RUN", - "WRITE" + "standard", + "reduced", + "expanded" ] }, - "backend": { - "$ref": "#/components/schemas/agents.AgentBackend" - }, - "created_at": { - "type": "string", - "format": "date-time" + "auto_open_fix_pr": { + "description": "When true, every fix run on this board opens a pull request instead of\nparking the fix for someone to publish. Defaults to false.", + "type": "boolean" }, - "description": { + "context_hub_repo_handle": { "type": "string" }, - "display": { - "$ref": "#/components/schemas/agents.AgentDisplay" - }, - "extras": { - "type": "object", - "additionalProperties": {} - }, - "id": { - "type": "string", - "format": "uuid" + "created_at": { + "type": "string" }, - "is_owner": { + "cron_enabled": { "type": "boolean" }, - "model": { - "$ref": "#/components/schemas/agents.AgentModel" - }, - "name": { + "cron_schedule": { "type": "string" }, - "options": { - "$ref": "#/components/schemas/agents.AgentOptions" - }, - "owner_id": { - "type": "string", - "format": "uuid" - }, - "permissions": { - "$ref": "#/components/schemas/agents.AgentPermissions" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - } - }, - "agents.CloneAgentRequest": { - "type": "object", - "properties": { - "name": { - "type": "string", - "example": "Researcher (Copy)" - }, - "permissions": { - "$ref": "#/components/schemas/agents.AgentPermissions" - } - } - }, - "agents.Connection": { - "type": "object", - "properties": { - "agent_id": { + "engine_version": { "type": "string" }, - "auth_token_id": { + "github_base_branch": { + "description": "Legacy: aliases the oldest entry in GithubRepos.", "type": "string" }, - "created_at": { + "github_repo_subdir": { + "description": "Legacy: aliases the oldest entry in GithubRepos.", "type": "string" }, - "created_by": { + "github_repo_url": { + "description": "Legacy: aliases the oldest entry in GithubRepos.", "type": "string" }, - "expires_at": { - "type": "string" + "github_repos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/agent.GithubRepo" + } }, "id": { "type": "string" }, - "provider_account_label": { + "issue_count": { + "type": "integer" + }, + "latest_run_id": { "type": "string" }, - "provider_id": { + "latest_thread_id": { + "description": "IDs of the latest run on LangSmith Deployments; NULL until first trigger.", "type": "string" }, - "scopes": { + "linear_available": { + "type": "boolean" + }, + "linear_integration": { + "$ref": "#/components/schemas/agent.LinearIntegration" + }, + "linear_sync_health": { + "$ref": "#/components/schemas/agent.LinearSyncHealth" + }, + "preview_verify_enabled": { + "description": "PreviewVerifyEnabled lets this board's fix runs use preview deployments\nwhen issue validation is enabled for its tracing project.", + "type": "boolean" + }, + "priorities": { "type": "array", "items": { "type": "string" } - } - } - }, - "agents.CreateAgentRequest": { - "type": "object", - "required": [ - "name" - ], - "properties": { - "backend": { - "$ref": "#/components/schemas/agents.AgentBackend" - }, - "configurable": { - "description": "Caller-defined key/value tracking merged into the agent's runtime\nconfiguration. Typed runtime fields win on key collision.", - "type": "object", - "additionalProperties": {} }, - "description": { + "run_filter": { + "description": "RunFilter is a runs-filter-DSL string scoping which traces Engine analyzes\n(prompt guidance, not an enforced query). NULL = no scope. Clamped by\nvalidateRunFilter.", "type": "string" }, - "display": { - "$ref": "#/components/schemas/agents.AgentDisplay" - }, - "extras": { - "description": "Deprecated: metadata is fully typed via `permissions` and `display`.\nCaller-defined key/value tracking attached to the agent's metadata.\nSunset tracked in AB-2553: https://linear.app/langchain/issue/AB-2553", - "type": "object", - "additionalProperties": {} + "selected_trace_count": { + "description": "Compatibility alias for selected_trace_count_last_14_days.\nDeprecated: use selected_trace_count_last_14_days.", + "type": "integer", + "deprecated": true }, - "files": { - "description": "Raw file map for paths the typed fields don't cover. Setting a typed\nfield and the corresponding `files` entry returns 422.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/agents.FileEntry" - } + "selected_trace_count_last_14_days": { + "description": "The number of traces Engine inspected in the last 14 days.", + "type": "integer" }, - "model": { - "$ref": "#/components/schemas/agents.AgentModel" + "selected_trace_count_last_7_days": { + "description": "The number of traces Engine inspected in the last 7 days.", + "type": "integer" }, - "name": { + "session_agent_overview_repo_id": { "type": "string" }, - "options": { - "$ref": "#/components/schemas/agents.AgentOptions" + "session_id": { + "type": "string" }, - "permissions": { - "$ref": "#/components/schemas/agents.AgentPermissions" + "session_lcu_spend_limit_monthly": { + "description": "SessionLCUSpendLimitMonthly is the per-project monthly Engine LCU spend\nlimit: NULL/negative = no limit; 0 or positive = monthly cap (spend is\nnever negative, so a cap of 0 always reads as reached). Enforced in\naddition to (and independently of) the org-level limit. Serialized as a\nstring to preserve NUMERIC(28,6) precision.", + "type": "string" }, - "subagents": { - "description": "Subagents. Each entry is written to `subagents//AGENTS.md` and `subagents//tools.json`.", - "type": "array", - "items": { - "$ref": "#/components/schemas/agents.SubagentSpec" - } + "session_name": { + "description": "JOINed from tracer_session", + "type": "string" }, - "system_prompt": { - "description": "Agent system prompt. Written to `AGENTS.md`.", - "type": "string", - "example": "You are a helpful agent. Use the available tools to answer the user's question." + "target_auth": { + "$ref": "#/components/schemas/agent.TargetAuthStatus" }, - "tools": { - "description": "Tool config. Written to `tools.json`.", - "allOf": [ - { - "$ref": "#/components/schemas/agents.ToolsConfig" - } - ] - } - } - }, - "agents.CreateConnectionRequest": { - "type": "object", - "properties": { - "auth_token_id": { + "tenant_id": { "type": "string" - } - } - }, - "agents.ErrorResponse": { - "type": "object", - "properties": { - "code": { + }, + "tenant_name": { + "description": "JOINed from tenants (workspace label); resolved server-side so the org-admin list can label rows across workspaces the caller isn't a member of", "type": "string" }, - "detail": { + "updated_at": { "type": "string" }, - "status": { - "type": "integer" + "user_instructions": { + "description": "User-owned freeform preferences. Engine reads this as authoritative\ncontext and reconciles it into the Agent Overview on the next scan, but\nnever edits it. NULL when the user hasn't set any.", + "type": "string" }, - "type": { + "validation_deployment_id": { + "description": "ValidationDeploymentID selects the deployment used for baseline replay\nand as the parent of fix-verification previews.", "type": "string" } } }, - "agents.FileEntry": { + "agent.LinearIntegration": { "type": "object", "properties": { - "commit_id": { - "description": "Optional pin to a specific skill commit (`type=skill` only). Defaults to\nthe repo's latest commit.", + "enabled": { + "type": "boolean" + }, + "project_id": { "type": "string" }, - "content": { - "description": "File contents as a UTF-8 string. Required for `file` entries; must be\nempty for `skill` entries.", - "type": "string", - "example": "# AGENTS.md\n\nYou are a helpful agent." + "project_name": { + "type": "string" }, - "repo_handle": { - "description": "Workspace skill repo handle. Required when `type=skill`, otherwise empty.", - "type": "string", - "example": "summarizer" + "team_id": { + "type": "string" }, - "type": { - "description": "Entry kind. `file` (default) carries inline `content`; `skill` links a\nshared workspace skill repo via `repo_handle`.", - "type": "string", - "enum": [ - "file", - "skill" - ], - "example": "file" - } - } - }, - "agents.HealthResponse": { - "type": "object", - "properties": { - "agent_id": { + "team_key": { "type": "string" }, - "checked_at": { - "type": "string", - "format": "date-time" + "team_name": { + "type": "string" }, - "mcp_check": { - "$ref": "#/components/schemas/agents.MCPCheck" - } - } - }, - "agents.InterruptRule": { - "type": "object" - }, - "agents.ListAgentsResponse": { - "type": "object", - "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/agents.AgentSummary" - } + "workspace_id": { + "type": "string" }, - "next_cursor": { + "workspace_name": { "type": "string" } } }, - "agents.ListConnectionsResponse": { + "agent.LinearIntegrationPatch": { "type": "object", "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/agents.Connection" - } - } - } - }, - "agents.MCPCheck": { - "type": "object", - "properties": { - "ok": { + "enabled": { "type": "boolean" }, - "servers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/agents.MCPServerHealth" - } - } - } - }, - "agents.MCPServerHealth": { - "type": "object", - "properties": { - "error": { + "project_id": { "type": "string" }, - "error_code": { - "$ref": "#/components/schemas/mcptools.MCPErrorCode" + "project_name": { + "type": "string" }, - "is_default": { - "type": "boolean" + "team_id": { + "type": "string" }, - "name": { + "team_key": { "type": "string" }, - "ok": { - "type": "boolean" + "team_name": { + "type": "string" }, - "url": { + "workspace_id": { + "type": "string" + }, + "workspace_name": { "type": "string" } } }, - "agents.SandboxConfig": { + "agent.LinearSyncHealth": { "type": "object", "properties": { - "delete_after_stop_seconds": { - "description": "Time after a sandbox is stopped before it is deleted, in seconds.", - "type": "integer", - "example": 1200 - }, - "idle_ttl_seconds": { - "description": "Idle timeout after which an unused sandbox is paused, in seconds.", - "type": "integer", - "example": 600 + "auth_required": { + "type": "integer" }, - "policy_ids": { - "description": "Sandbox policies governing tool execution.", - "type": "array", - "items": { - "type": "string" - } + "failed": { + "type": "integer" }, - "sandbox_id": { - "description": "Pinned sandbox instance the agent reuses across runs.", - "type": "string" + "paused": { + "type": "integer" }, - "scope": { - "description": "Sandbox lifecycle. `thread` gives each thread its own sandbox; `agent`\nshares one sandbox across all of the agent's threads. Required when\n`backend.type` is `sandbox`.", - "type": "string", - "enum": [ - "thread", - "agent" - ], - "example": "thread" + "pending": { + "type": "integer" }, - "snapshot_id": { - "description": "Snapshot used when creating new sandbox-backed computers.", - "type": "string", - "example": "550e8400-e29b-41d4-a716-446655440000" + "synced": { + "type": "integer" } } }, - "agents.SharedUsers": { + "agent.SaveOverviewRequest": { "type": "object", "properties": { - "read": { - "description": "User IDs allowed to read the agent.", - "type": "array", - "items": { - "type": "string" - } - }, - "run": { - "description": "User IDs allowed to run the agent.", - "type": "array", - "items": { - "type": "string" - } - }, - "update": { - "description": "User IDs allowed to update the agent.", - "type": "array", - "items": { - "type": "string" - } + "content": { + "type": "string" } } }, - "agents.SubagentSpec": { + "agent.SaveOverviewResponse": { "type": "object", "properties": { - "description": { - "description": "Short human-readable description.", - "type": "string", - "example": "Researches a topic and summarises findings." - }, - "instructions": { - "description": "Deprecated: use `system_prompt`. Accepted for backwards compatibility;\n`system_prompt` takes precedence when both are set.", + "commit_hash": { "type": "string" }, - "model": { - "description": "Model for this subagent. Inherits the parent agent's model when omitted.", - "allOf": [ - { - "$ref": "#/components/schemas/agents.AgentModel" - } - ] - }, - "name": { - "description": "Subagent slug. Becomes `subagents//AGENTS.md`.", - "type": "string", - "example": "researcher" - }, - "system_prompt": { - "description": "Subagent system prompt. Written to `subagents//AGENTS.md`.", - "type": "string", - "example": "You are a research assistant. Use the available tools to gather information." - }, - "tools": { - "description": "Subagent tool config. Written to `subagents//tools.json`.", - "allOf": [ - { - "$ref": "#/components/schemas/agents.ToolsConfig" - } - ] + "session_agent_overview_repo_id": { + "type": "string" } } }, - "agents.ToolSpec": { + "agent.TargetAuthInput": { "type": "object", "properties": { - "display_name": { - "description": "Display name for the tool. Defaults to the tool name when empty.", - "type": "string", - "example": "read_url_content" - }, - "mcp_server_name": { - "description": "Display name for the MCP server. Defaults to the URL when empty.", - "type": "string", - "example": "Fleet" - }, - "mcp_server_url": { - "description": "URL of the MCP server hosting this tool.", - "type": "string", - "example": "https://tools.example.com" - }, - "name": { - "description": "Tool name as exposed by the MCP server.", - "type": "string", - "example": "read_url_content" + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } }, - "agents.ToolsConfig": { + "agent.TargetAuthStatus": { "type": "object", "properties": { - "interrupt_config": { - "description": "Per-tool interrupt rules keyed by tool name. Each value is `true`/`false`\n(require approval or not) or an object (see InterruptOnConfig). `{}` = no\ninterrupts.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/agents.InterruptRule" - } + "has_unreadable_credentials": { + "description": "True when a credential is stored but cannot be read back, so the UI can\noffer to replace it instead of showing an unconfigured board.", + "type": "boolean" }, - "tools": { - "description": "MCP tools available to the agent. Serialised to `tools.json`.", + "header_names": { "type": "array", "items": { - "$ref": "#/components/schemas/agents.ToolSpec" + "type": "string" } } } }, - "agents.UpdateAgentRequest": { + "agent.UpdateIssuesAgentRequest": { "type": "object", "properties": { - "backend": { - "$ref": "#/components/schemas/agents.AgentBackend" + "agent_overview_accepted": { + "type": "boolean" }, - "configurable": { - "description": "Caller-defined key/value tracking merged into the agent's runtime\nconfiguration. Typed runtime fields win on key collision.", - "type": "object", - "additionalProperties": {} + "analysis_level": { + "description": "AnalysisLevel: \"standard\", \"reduced\", or \"expanded\". Switching to or from\n\"reduced\" also resets the scan cadence. nil = don't change.", + "type": "string", + "enum": [ + "standard", + "reduced", + "expanded" + ] }, - "deleted_paths": { - "description": "Paths to remove from the file tree. Relative paths only.", - "type": "array", - "items": { - "type": "string" - } + "auto_open_fix_pr": { + "type": "boolean" }, - "description": { + "context_hub_repo_handle": { "type": "string" }, - "display": { - "$ref": "#/components/schemas/agents.AgentDisplay" - }, - "extras": { - "description": "Caller-defined key/value tracking attached to the agent's metadata.", - "type": "object", - "additionalProperties": {} + "cron_enabled": { + "type": "boolean" }, - "files": { - "description": "Raw file entries created or replaced by path. Triggers a new commit.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/agents.FileEntry" - } + "github_base_branch": { + "description": "Legacy: ignored without github_repo_url.", + "type": "string" }, - "model": { - "$ref": "#/components/schemas/agents.AgentModel" + "github_repo_subdir": { + "description": "Legacy: ignored without github_repo_url.", + "type": "string" }, - "name": { + "github_repo_url": { + "description": "Legacy: use the github-repos endpoints. Absent leaves repos alone,\n\"\" unlinks all, otherwise replaces the list with the one repo named.", "type": "string" }, - "options": { - "$ref": "#/components/schemas/agents.AgentOptions" + "linear_integration": { + "$ref": "#/components/schemas/agent.LinearIntegrationPatch" }, - "permissions": { - "$ref": "#/components/schemas/agents.AgentPermissions" + "preview_verify_enabled": { + "type": "boolean" }, - "subagents": { - "description": "Subagents. Each entry is written to `subagents//AGENTS.md` and `subagents//tools.json`. Triggers a new commit.", + "priorities": { "type": "array", "items": { - "$ref": "#/components/schemas/agents.SubagentSpec" + "type": "string" } }, - "system_prompt": { - "description": "Agent system prompt. Written to `AGENTS.md`. Triggers a new commit.", - "type": "string", - "example": "You are a helpful agent. Use the available tools to answer the user's question." + "run_filter": { + "description": "Trace-scope DSL. nil = don't change; \"\" clears it.", + "type": "string" }, - "tools": { - "description": "Tool config. Written to `tools.json`. Triggers a new commit.", + "session_agent_overview_repo_id": { + "type": "string" + }, + "session_lcu_spend_limit_monthly": { + "description": "SessionLCUSpendLimitMonthly sets the per-project monthly LCU spend limit.\nTri-state: absent (nil) = don't change; 0 or positive = monthly cap (a cap\nof 0 is always reached, blocking new runs); negative clears it (stored as\nNULL = no limit). The frontend sends a negative number to clear rather\nthan null, since null is indistinguishable from \"absent\". Serialized as a\nstring to preserve NUMERIC precision.", + "type": "string" + }, + "target_auth": { + "description": "TargetAuth replaces validation-deployment authentication. Header values\nare write-only.", "allOf": [ { - "$ref": "#/components/schemas/agents.ToolsConfig" + "$ref": "#/components/schemas/agent.TargetAuthInput" } ] + }, + "user_instructions": { + "description": "Freeform user preferences. Send \"\" to clear (the frontend must not send null).", + "type": "string" + }, + "validation_deployment_id": { + "description": "ValidationDeploymentID is a deployment UUID or LangSmith deployment URL,\nor an empty string to disable validation.", + "type": "string" } } }, @@ -75970,12 +80434,25 @@ "id": { "type": "string" }, + "is_suspended": { + "type": "boolean" + }, + "suspended_at": { + "type": "string" + }, + "suspended_reason": { + "type": "string" + }, + "suspended_status_code": { + "type": "integer" + }, "target": { "type": "string", "enum": [ "pagerduty", "webhook", - "dynatrace" + "dynatrace", + "slack" ] }, "updated_at": { @@ -76004,7 +80481,8 @@ "enum": [ "pagerduty", "webhook", - "dynatrace" + "dynatrace", + "slack" ] } } @@ -76204,6 +80682,7 @@ "properties": { "actions": { "type": "array", + "minItems": 1, "items": { "$ref": "#/components/schemas/alerts.AlertActionBase" } @@ -76231,6 +80710,7 @@ "properties": { "actions": { "type": "array", + "minItems": 1, "items": { "$ref": "#/components/schemas/alerts.AlertActionBase" } @@ -76240,6 +80720,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": [ @@ -76259,156 +80762,263 @@ } } }, - "auth.CreateSessionRequest": { + "annotationqueues.AnnotationQueueItem": { "type": "object", "properties": { - "agent_id": { + "added_at": { "type": "string" }, - "is_default": { - "type": "boolean" - }, - "provider_id": { + "id": { "type": "string" }, - "scopes": { - "type": "array", - "items": { - "type": "string" - } - }, - "strategy": { - "$ref": "#/components/schemas/auth.SessionStrategy" + "item_type": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemType" }, - "token_id": { + "last_reviewed_time": { + "description": "LastReviewedTime is always present on the wire (null until reviewed).", "type": "string" - } - } - }, - "auth.CreateSessionResponse": { - "type": "object", - "properties": { - "id": { + }, + "project_id": { "type": "string" }, - "metadata": { - "type": "object", - "additionalProperties": {} + "queue_id": { + "type": "string" }, - "provider_id": { + "run_id": { "type": "string" }, - "status": { - "$ref": "#/components/schemas/auth.SessionStatus" + "source_proposed_example_id": { + "type": "string" }, - "token": { + "start_time": { "type": "string" }, - "verification_url": { + "thread_id": { "type": "string" } } }, - "auth.GetSessionResponse": { + "annotationqueues.AnnotationQueueItemCountResponse": { "type": "object", "properties": { - "id": { - "type": "string" - }, - "status": { - "$ref": "#/components/schemas/auth.SessionStatus" + "count": { + "type": "integer" } } }, - "auth.ListTokensResponse": { + "annotationqueues.AnnotationQueueItemInput": { "type": "object", "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/auth.TokenSummary" - } + "item_type": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemType" }, - "next_cursor": { + "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" } } }, - "auth.SessionStatus": { + "annotationqueues.AnnotationQueueItemListStatus": { "type": "string", "enum": [ - "PENDING", - "COMPLETED", - "CONNECTION_REQUIRED", - "TOKEN_EXPIRED" + "needs_my_review", + "needs_others_review", + "archived" ], "x-enum-varnames": [ - "SessionStatusPending", - "SessionStatusCompleted", - "SessionStatusConnectionRequired", - "SessionStatusTokenExpired" + "AnnotationQueueItemStatusNeedsMyReview", + "AnnotationQueueItemStatusNeedsOthersReview", + "AnnotationQueueItemStatusArchived" ] }, - "auth.SessionStrategy": { + "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": [ - "REUSE", - "CREATE" + "RUN", + "THREAD" ], "x-enum-varnames": [ - "SessionStrategyReuse", - "SessionStrategyCreate" + "AnnotationQueueItemTypeRun", + "AnnotationQueueItemTypeThread" ] }, - "auth.TokenSummary": { + "annotationqueues.AnnotationQueueListItem": { "type": "object", "properties": { - "created_at": { + "added_at": { "type": "string" }, - "expires_at": { + "completed_by": { + "type": "array", + "items": { + "type": "string" + } + }, + "effective_added_at": { "type": "string" }, "id": { "type": "string" }, - "is_default": { - "type": "boolean" + "item_type": { + "$ref": "#/components/schemas/annotationqueues.AnnotationQueueItemType" }, - "label": { + "last_reviewed_time": { + "description": "LastReviewedTime is always present on the wire (null until reviewed).", "type": "string" }, - "provider_id": { + "project_id": { "type": "string" }, - "scopes": { + "queue_id": { + "type": "string" + }, + "reserved_by": { "type": "array", "items": { "type": "string" } }, - "updated_at": { + "run_id": { + "type": "string" + }, + "source_proposed_example_id": { + "type": "string" + }, + "start_time": { + "type": "string" + }, + "thread_id": { "type": "string" } } }, - "auth.errorResponse": { + "annotationqueues.AnnotationQueueReviewStatus": { + "type": "string", + "enum": [ + "viewed", + "completed" + ], + "x-enum-varnames": [ + "AnnotationQueueReviewStatusViewed", + "AnnotationQueueReviewStatusCompleted" + ] + }, + "annotationqueues.CreateAnnotationQueueItemStatusRequest": { "type": "object", "properties": { - "code": { + "override_added_at": { "type": "string" }, - "detail": { + "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": { - "type": "integer" + "$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" + } }, - "type": { + "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" + } + } + }, + "auth.SandboxDelegationMode": { + "type": "string", + "enum": [ + "INHERIT", + "EXPLICIT" + ], + "x-enum-varnames": [ + "SandboxDelegationModeInherit", + "SandboxDelegationModeExplicit" + ] + }, "authn.OrganizationConfig": { "type": "object", "properties": { @@ -76428,6 +81038,18 @@ "description": "Indicates whether this org can provision BYOC data planes.", "type": "boolean" }, + "byoc_external_id": { + "description": "ByocExternalID is the organization's assigned AWS external ID, stored only in org config.", + "readOnly": true, + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, "byoc_max_data_planes": { "description": "ByocMaxDataPlanes is the maximum number of BYOC data planes this org may have provisioned at once.", "type": "integer" @@ -76480,6 +81102,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" @@ -76488,12 +81114,16 @@ "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" }, "enable_burndown_vs_commit_view": { - "description": "EnableBurndownVsCommitView indicates whether the org can view contract usage (burndown vs commitment).", + "description": "Deprecated: EnableBurndownVsCommitView is retained for backward compatibility and is always false; contract-usage visibility is no longer gated on it.", "type": "boolean" }, "enable_granular_usage_reporting": { @@ -76512,14 +81142,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_org_usage_charts": { - "description": "EnableOrgUsageCharts indicates whether to show organization usage charts backed by ClickHouse queries instead of Metronome.", - "type": "boolean" - }, "enable_pricing_redesign": { "description": "EnablePricingRedesign indicates whether the pricing redesign is enabled", "type": "boolean" @@ -76541,21 +81163,41 @@ "type": "boolean" }, "engine_default_enabled": { - "description": "EngineDefaultEnabled indicates whether Engine is enabled by default for this organization's plan.", + "description": "EngineDefaultEnabled is the plan-level Engine entitlement. An explicit false\ndisables Engine for the organization outright; true and nil both defer to the\norganization's own engine_enabled setting.", "type": "boolean" }, "engine_lcu_spend_limit_monthly": { "description": "EngineLCUSpendLimitMonthly is an optional Metronome-set monthly LCU spend limit\nfor Engine. nil means no limit at this layer. Both the Metronome plan and customer\ncustom fields use this single key; the plan-then-customer config merge means the\ncustomer value (when set) overwrites the plan value, so only the resolved value\narrives here. The effective enforced limit is the minimum of this and the org admin\nlimit (organizations.engine_lcu_spend_limit_monthly).", "type": "number" }, + "fleet_builtin_models_enabled": { + "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" + }, + "gateway_pii_redaction_enabled": { + "description": "GatewayPIIRedactionEnabled indicates whether this org can use PII\ndetection/redaction inside gateway data protection (guard) policies.\nWhen this is off, PII-configured guard policies are unavailable as a\nwhole. Set by Metronome entitlement, not admin-patchable.", + "type": "boolean" + }, "ip_allowlist_enabled": { "description": "IPAllowlistEnabled indicates whether this org can configure and enforce IP allowlists.\nSet by Metronome entitlement, not admin-patchable.", "type": "boolean" }, + "is_anonymous": { + "description": "IsAnonymous, when true, restricts members to viewing only themselves in\nmember-listing endpoints.", + "type": "boolean" + }, "kv_dataset_message_support": { "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" @@ -76587,6 +81229,21 @@ "description": "LLMGatewayEnabled indicates whether this org can use the LLM Gateway\n(admin UI and gateway policies).", "type": "boolean" }, + "lmt_enabled": { + "description": "LMTEnabled indicates whether this org's plan entitles it to use LangSmith\nManaged Tools. Set by Metronome entitlement and required for all\nManaged Tools APIs and MCP requests. Unset or false blocks access.", + "type": "boolean" + }, + "lmt_lsu_spend_limit_monthly": { + "description": "LMTLSUSpendLimitMonthly caps an org's monthly Managed Tools LSU spend,\nresolved from Metronome custom fields. Unset or zero blocks usage.\nNegative means unlimited; positive values cap monthly LSU usage.\nPer-org only, with no environment default.", + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, "max_agent_builder_assistants": { "description": "MaxAgentBuilderAssistants is the maximum number of Agent Builder assistants allowed for this org.", "type": "integer" @@ -76608,7 +81265,7 @@ "type": "integer" }, "max_prompt_webhooks": { - "description": "MaxPromptWebhooks is the maximum number of prompt webhooks allowed for this org.", + "description": "MaxPromptWebhooks limits each org's Prompt Hub webhooks.", "type": "integer" }, "max_sandbox_cpu": { @@ -76627,6 +81284,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" @@ -76651,6 +81312,10 @@ "description": "SandboxEnabled indicates whether this org can use sandboxes.", "type": "boolean" }, + "sandbox_restricted_egress": { + "description": "SandboxRestrictedEgress forces sandboxes onto the curated restricted-egress\nallowlist, regardless of access control supplied by the caller.", + "type": "boolean" + }, "show_playground_prompt_canvas": { "description": "ShowPlaygroundPromptCanvas indicates whether to show the playground prompt canvas.", "type": "boolean" @@ -76671,6 +81336,10 @@ "description": "TenantSkipTopkFacets indicates whether the tenant should skip topk facets in run stats.", "type": "boolean" }, + "tuned_evals_enabled": { + "description": "TunedEvalsEnabled indicates whether this org's plan entitles it to\nuse LangChain Tuned Evaluators. Set by Metronome entitlement.", + "type": "boolean" + }, "use_exact_search_for_prompts": { "description": "UseExactSearchForPrompts indicates whether to use exact search for prompts.", "type": "boolean" @@ -76874,10 +81543,18 @@ "charts:delete", "charts:read", "charts:update", + "custom-apps:create", + "custom-apps:delete", + "custom-apps:download", + "custom-apps:read", + "custom-apps:update", + "datasets:clone", "datasets:create", "datasets:delete", + "datasets:download", "datasets:read", "datasets:share", + "datasets:tag-on-create", "datasets:update", "deployments:create", "deployments:delete", @@ -76887,6 +81564,10 @@ "feedback:delete", "feedback:read", "feedback:update", + "feedback-configs:create", + "feedback-configs:update", + "feedback-configs:delete", + "feedback-configs:manage-enforced", "experiments:run", "issues:create", "issues:delete", @@ -76895,36 +81576,58 @@ "projects:create", "projects:delete", "projects:read", + "projects:tag-on-create", "projects:update", "projects:increase-trace-tier", "projects:decrease-trace-tier", "prompts:create", "prompts:delete", "prompts:read", + "prompts:tag-on-create", "prompts:update", "prompts:share", "rules:create", "rules:delete", "rules:read", "rules:update", + "rules:configure-retention", "runs:create", "runs:read", + "runs:read-inputs", + "runs:read-outputs", + "runs:read-stats", "runs:share", "runs:delete", + "model-price-map:create", + "model-price-map:read", + "model-price-map:update", + "model-price-map:delete", "sandboxes:create", "sandboxes:delete", "sandboxes:read", + "sandboxes:tag-on-create", "sandboxes:update", "sandboxes:exec", + "snapshots:create", + "snapshots:delete", + "snapshots:update", "workspaces:manage-members", "workspaces:manage-secrets", "workspaces:manage", "workspaces:manage-model-configs", + "workspaces:manage-keys", + "workspaces:tracing-keys:create", "workspaces:read", "alerts:create", "alerts:update", "alerts:delete", "alerts:read", + "agent-auth-connections:read", + "agent-auth-connections:create", + "agent-auth-connections:update", + "agent-auth-connections:delete", + "agent-auth-connections:revoke", + "agent-auth-credentials:use", "bulk-exports:read", "bulk-exports:manage", "mcp-servers:create", @@ -76935,9 +81638,43 @@ "gateway:invoke", "fleet:read-admin-config", "fleet:write-admin-config", + "fleet-agents:create", + "fleet-agents:read", + "fleet-agents:invoke", + "fleet-agents:update", + "fleet-agents:delete", + "fleet-skills:create", + "fleet-skills:read", + "fleet-skills:update", + "fleet-skills:delete", + "organization:access-control:manage", + "organization:audit-logs:read", + "organization:authentication:manage", + "organization:billing:manage", + "organization:billing:read", + "organization:engine:manage", + "organization:engine:read", + "organization:gateway:manage", + "organization:infrastructure:manage", + "organization:infrastructure:read", + "organization:installation-operations:manage", + "organization:installation-operations:read", + "organization:installation-usage:manage", + "organization:integrations:manage", + "organization:integrations:read", + "organization:members:manage", + "organization:retention:manage", + "organization:security-policy:manage", + "organization:service-key:manage", + "organization:settings:manage", + "organization:usage-controls:manage", + "organization:workspaces:manage", "organization:pats:create", "organization:read", - "organization:manage" + "organization:read-metadata", + "organization:manage", + "organization:manage-model-configs", + "organization:manage-model-secrets" ], "x-enum-varnames": [ "AnnotationQueuesCreate", @@ -76948,10 +81685,18 @@ "ChartsDelete", "ChartsRead", "ChartsUpdate", + "CustomAppsCreate", + "CustomAppsDelete", + "CustomAppsDownload", + "CustomAppsRead", + "CustomAppsUpdate", + "DatasetsClone", "DatasetsCreate", "DatasetsDelete", + "DatasetsDownload", "DatasetsRead", "DatasetsShare", + "DatasetsTagOnCreate", "DatasetsUpdate", "DeploymentsCreate", "DeploymentsDelete", @@ -76961,6 +81706,10 @@ "FeedbackDelete", "FeedbackRead", "FeedbackUpdate", + "FeedbackConfigsCreate", + "FeedbackConfigsUpdate", + "FeedbackConfigsDelete", + "FeedbackConfigsManageEnforced", "ExperimentsRun", "IssuesCreate", "IssuesDelete", @@ -76969,36 +81718,58 @@ "ProjectsCreate", "ProjectsDelete", "ProjectsRead", + "ProjectsTagOnCreate", "ProjectsUpdate", "ProjectsIncreaseTraceTier", "ProjectsDecreaseTraceTier", "PromptsCreate", "PromptsDelete", "PromptsRead", + "PromptsTagOnCreate", "PromptsUpdate", "PromptsShare", "RulesCreate", "RulesDelete", "RulesRead", "RulesUpdate", + "RulesConfigureRetention", "RunsCreate", "RunsRead", + "RunsReadInputs", + "RunsReadOutputs", + "RunsReadStats", "RunsShare", "RunsDelete", + "ModelPriceMapCreate", + "ModelPriceMapRead", + "ModelPriceMapUpdate", + "ModelPriceMapDelete", "SandboxesCreate", "SandboxesDelete", "SandboxesRead", + "SandboxesTagOnCreate", "SandboxesUpdate", "SandboxesExec", + "SnapshotsCreate", + "SnapshotsDelete", + "SnapshotsUpdate", "WorkspacesManageMembers", "WorkspacesManageSecrets", "WorkspacesManage", "WorkspacesManageModelConfigs", + "WorkspacesManageKeys", + "WorkspacesTracingKeysCreate", "WorkspacesRead", "AlertsCreate", "AlertsUpdate", "AlertsDelete", "AlertsRead", + "AgentAuthConnectionsRead", + "AgentAuthConnectionsCreate", + "AgentAuthConnectionsUpdate", + "AgentAuthConnectionsDelete", + "AgentAuthConnectionsRevoke", + "AgentAuthCredentialsUse", "BulkExportsRead", "BulkExportsManage", "McpServersCreate", @@ -77009,35 +81780,93 @@ "GatewayInvoke", "FleetReadAdminConfig", "FleetWriteAdminConfig", + "FleetAgentsCreate", + "FleetAgentsRead", + "FleetAgentsInvoke", + "FleetAgentsUpdate", + "FleetAgentsDelete", + "FleetSkillsCreate", + "FleetSkillsRead", + "FleetSkillsUpdate", + "FleetSkillsDelete", + "OrganizationAccessControlManage", + "OrganizationAuditLogsRead", + "OrganizationAuthenticationManage", + "OrganizationBillingManage", + "OrganizationBillingRead", + "OrganizationEngineManage", + "OrganizationEngineRead", + "OrganizationGatewayManage", + "OrganizationInfrastructureManage", + "OrganizationInfrastructureRead", + "OrganizationInstallationOperationsManage", + "OrganizationInstallationOperationsRead", + "OrganizationInstallationUsageManage", + "OrganizationIntegrationsManage", + "OrganizationIntegrationsRead", + "OrganizationMembersManage", + "OrganizationRetentionManage", + "OrganizationSecurityPolicyManage", + "OrganizationServiceKeyManage", + "OrganizationSettingsManage", + "OrganizationUsageControlsManage", + "OrganizationWorkspacesManage", "OrganizationPATsCreate", "OrganizationRead", - "OrganizationManage" + "OrganizationReadMetadata", + "OrganizationManage", + "OrganizationManageModelConfigs", + "OrganizationManageModelSecrets" ] }, - "backfills.restartBackfillRequest": { + "authz_internal.UpdateAccessPolicyPayload": { "type": "object", "properties": { - "backfill_name": { + "condition_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/authz_internal.ConditionGroup" + } + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "effect": { + "type": "string" + }, + "name": { "type": "string" } } }, - "beacon.SubmitUsageSnapshotPayload": { + "aws.ResourceTag": { "type": "object", + "required": [ + "key" + ], "properties": { - "from_timestamp": { - "type": "string" - }, - "license_key": { - "type": "string" - }, - "measures": { - "type": "object", - "additionalProperties": { - "type": "integer" - } + "key": { + "type": "string", + "maxLength": 128, + "minLength": 1 }, - "to_timestamp": { + "value": { + "type": "string", + "maxLength": 256 + } + } + }, + "backfills.restartBackfillRequest": { + "type": "object", + "properties": { + "backfill_name": { "type": "string" } } @@ -77178,46 +82007,195 @@ } } }, - "commits.ExampleRun": { + "commits.ExampleRun": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "inputs": { + "type": "object" + }, + "outputs": { + "type": "object" + }, + "session_id": { + "type": "string", + "format": "uuid" + }, + "start_time": { + "type": "string" + } + } + }, + "commits.ListCommitsResponse": { + "type": "object", + "properties": { + "commits": { + "description": "List of commits with lookup information", + "type": "array", + "items": { + "$ref": "#/components/schemas/commits.CommitWithLookups" + } + }, + "total": { + "description": "Total number of commits", + "type": "integer" + } + } + }, + "data_planes.CreateDataPlaneRequest": { + "oneOf": [ + { + "$ref": "#/components/schemas/data_planes.CreateDataPlaneRequestAws" + }, + { + "$ref": "#/components/schemas/data_planes.CreateDataPlaneRequestAzure" + }, + { + "$ref": "#/components/schemas/data_planes.CreateDataPlaneRequestGCP" + } + ] + }, + "data_planes.CreateDataPlaneRequestAws": { + "type": "object", + "required": [ + "name", + "region", + "role_arn" + ], + "properties": { + "additional_tags": { + "type": "array", + "maxItems": 40, + "items": { + "$ref": "#/components/schemas/aws.ResourceTag" + } + }, + "byoiam_enabled": { + "description": "Use customer-managed IAM roles created by the LangSmith BYOIAM Terraform module.", + "type": "boolean" + }, + "byovpc": { + "$ref": "#/components/schemas/data_planes.DataPlaneBYOVPCSettings" + }, + "eks_api_privatelink_disabled": { + "description": "Use a public EKS API endpoint restricted to LangSmith control-plane egress IPs instead of creating a managed PrivateLink endpoint service. Defaults to false.", + "type": "boolean" + }, + "name": { + "type": "string" + }, + "public_load_balancer": { + "type": "boolean" + }, + "region": { + "type": "string" + }, + "role_arn": { + "type": "string" + }, + "trace_storage": { + "description": "TraceStorage selects the run and trace store. Defaults to CLICKHOUSE.", + "allOf": [ + { + "$ref": "#/components/schemas/data_planes.DataPlaneTraceStorage" + } + ] + }, + "vpc_cidr": { + "description": "VPCCIDR is used only when LangSmith creates the VPC.", + "type": "string" + } + }, + "additionalProperties": false + }, + "data_planes.CreateDataPlaneRequestAzure": { "type": "object", + "required": [ + "azure_entra_tenant_id", + "name", + "region", + "resource_group_id", + "vpc_cidr" + ], "properties": { - "id": { - "type": "string", - "format": "uuid" + "azure_entra_tenant_id": { + "description": "EntraTenantID is the Microsoft Entra tenant of the resource group.", + "type": "string" }, - "inputs": { - "type": "object" + "name": { + "type": "string" }, - "outputs": { - "type": "object" + "public_load_balancer": { + "type": "boolean" }, - "session_id": { - "type": "string", - "format": "uuid" + "region": { + "type": "string" }, - "start_time": { + "resource_group_id": { + "description": "ResourceGroupID is /subscriptions//resourceGroups/:\nthe group that the LangSmith BYOC Terraform module created for this data\nplane. It must contain only the data plane Key Vault. LangSmith deletes the\ngroup when the data plane is deleted.", + "type": "string" + }, + "vpc_cidr": { + "description": "VPCCIDR is the VNet that LangSmith creates.", "type": "string" } - } + }, + "additionalProperties": false }, - "commits.ListCommitsResponse": { + "data_planes.CreateDataPlaneRequestGCP": { "type": "object", + "required": [ + "gcp_project_id", + "name", + "provisioner_service_account", + "region", + "vpc_cidr" + ], "properties": { - "commits": { - "description": "List of commits with lookup information", - "type": "array", - "items": { - "$ref": "#/components/schemas/commits.CommitWithLookups" - } + "byoiam_enabled": { + "description": "Use customer-managed service accounts created by the LangSmith GCP BYOC Terraform module with byo_iam = true.", + "type": "boolean" }, - "total": { - "description": "Total number of commits", - "type": "integer" + "gcp_project_id": { + "description": "ProjectID is the customer project that hosts the data plane.", + "type": "string" + }, + "name": { + "type": "string" + }, + "provisioner_service_account": { + "description": "ProvisionerServiceAccount is the customer service account that the\ncontrol plane impersonates to create the data plane resources. It must be\nin the project, and its description must be the organization's external ID.", + "type": "string" + }, + "public_load_balancer": { + "type": "boolean" + }, + "region": { + "type": "string" + }, + "sandboxes_enabled": { + "description": "Deploy LangSmith sandboxes in the data plane. Defaults to false.", + "type": "boolean" + }, + "vpc_cidr": { + "description": "VPCCIDR is the VPC network that LangSmith creates.", + "type": "string" } - } + }, + "additionalProperties": false }, - "credentials.ErrorResponse": { + "data_planes.CreateErrorResponse": { "type": "object", + "required": [ + "code", + "detail", + "status", + "title", + "type" + ], "properties": { "code": { "type": "string" @@ -77225,81 +82203,237 @@ "detail": { "type": "string" }, + "instance": { + "type": "string" + }, "status": { "type": "integer" }, + "title": { + "type": "string" + }, "type": { "type": "string" } } }, - "credentials.bindingPayload": { + "data_planes.DataPlaneBYOVPCSettings": { "type": "object", - "required": [ - "kind", - "url" - ], "properties": { - "kind": { - "type": "string", - "enum": [ - "mcp_server" - ] + "private_app_subnet_ids": { + "type": "array", + "items": { + "type": "string" + } }, - "url": { + "private_db_subnet_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "public_subnet_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpc_id": { "type": "string" } } }, - "credentials.response": { + "data_planes.DataPlaneCloud": { + "type": "string", + "enum": [ + "AWS", + "AZURE", + "GCP" + ], + "x-enum-varnames": [ + "DataPlaneCloudAWS", + "DataPlaneCloudAzure", + "DataPlaneCloudGCP" + ] + }, + "data_planes.DataPlaneFirewallSettings": { "type": "object", + "required": [ + "allow_http", + "allowed_cidrs", + "allowed_domains" + ], "properties": { - "auth_type": { - "type": "string" + "allow_http": { + "type": "boolean" + }, + "allowed_cidrs": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "integer" + } + } }, - "bindings": { + "allowed_domains": { "type": "array", "items": { - "$ref": "#/components/schemas/credentials.bindingPayload" + "type": "string" } + } + } + }, + "data_planes.DataPlaneFleetOIDCSettings": { + "type": "object", + "required": [ + "audience", + "email_claim", + "groups_claim", + "is_enabled", + "issuer_url", + "provider", + "subject_claim", + "tenant_claim", + "tenant_mappings" + ], + "properties": { + "audience": { + "type": "string" }, - "created_at": { + "email_claim": { "type": "string" }, - "description": { + "groups_claim": { "type": "string" }, - "display_name": { + "is_enabled": { + "type": "boolean" + }, + "issuer_url": { "type": "string" }, - "id": { + "provider": { "type": "string" }, - "scope_slug": { + "subject_claim": { "type": "string" + }, + "tenant_claim": { + "type": "string" + }, + "tenant_mappings": { + "type": "object", + "additionalProperties": { + "type": "string" + } } } }, - "data_planes.CreateDataPlaneRequestAws": { + "data_planes.DataPlaneProvisioningSettings": { "type": "object", "properties": { - "external_id": { + "additional_tags": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azure_entra_tenant_id": { + "description": "EntraTenantID is the Microsoft Entra tenant of the resource group.", "type": "string" }, - "name": { + "byovpc": { + "$ref": "#/components/schemas/data_planes.DataPlaneBYOVPCSettings" + }, + "cloud": { + "$ref": "#/components/schemas/data_planes.DataPlaneCloud" + }, + "gcp_project_id": { + "description": "ProjectID is the customer project that hosts the data plane.", "type": "string" }, - "public_load_balancer": { + "is_byoiam_enabled": { "type": "boolean" }, - "region": { + "is_eks_api_privatelink_disabled": { + "type": "boolean" + }, + "is_gcp_byoiam_enabled": { + "description": "IsGCPBYOIAMEnabled is true when the customer created the data plane\nservice accounts. It has its own name because AWS has is_byoiam_enabled.", + "type": "boolean" + }, + "is_public_load_balancer": { + "type": "boolean" + }, + "provisioner_service_account": { + "description": "ProvisionerServiceAccount is the customer service account that the\ncontrol plane impersonates.", + "type": "string" + }, + "resource_group_id": { "type": "string" }, "role_arn": { "type": "string" }, + "trace_storage": { + "description": "TraceStorage is the run and trace store. It is SMITHDB when SmithDB is\nenabled and serves queries, and CLICKHOUSE otherwise, including for data\nplanes created before this setting existed.", + "allOf": [ + { + "$ref": "#/components/schemas/data_planes.DataPlaneTraceStorage" + } + ] + }, "vpc_cidr": { + "description": "VPCCIDR is the effective AWS VPC, Azure VNet, or GCP VPC network CIDR, including for customer-managed VPCs.", + "type": "string" + } + } + }, + "data_planes.DataPlaneTTLSettings": { + "type": "object", + "required": [ + "enabled", + "long_days", + "short_days" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "long_days": { + "type": "integer" + }, + "short_days": { + "type": "integer" + } + } + }, + "data_planes.DataPlaneTraceStorage": { + "type": "string", + "enum": [ + "CLICKHOUSE", + "SMITHDB" + ], + "x-enum-varnames": [ + "DataPlaneTraceStorageClickHouse", + "DataPlaneTraceStorageSmithDB" + ] + }, + "data_planes.ErrorResponse": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "error": { "type": "string" + }, + "missing_permissions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/data_planes.MissingPermission" + } } } }, @@ -77314,6 +82448,20 @@ } } }, + "data_planes.MissingPermission": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "decision": { + "type": "string" + }, + "resource_arn": { + "type": "string" + } + } + }, "data_planes.PublicDataPlane": { "type": "object", "properties": { @@ -77323,12 +82471,24 @@ "created_at": { "type": "string" }, + "firewall": { + "$ref": "#/components/schemas/data_planes.DataPlaneFirewallSettings" + }, + "fleet_oidc": { + "$ref": "#/components/schemas/data_planes.DataPlaneFleetOIDCSettings" + }, "id": { "type": "string" }, + "maintenance_window": { + "type": "string" + }, "name": { "type": "string" }, + "provisioning_settings": { + "$ref": "#/components/schemas/data_planes.DataPlaneProvisioningSettings" + }, "region": { "type": "string" }, @@ -77338,6 +82498,9 @@ "status_updated_at": { "type": "string" }, + "ttl": { + "$ref": "#/components/schemas/data_planes.DataPlaneTTLSettings" + }, "workspaces": { "type": "array", "items": { @@ -77364,6 +82527,7 @@ "provisioning", "provisioning_failed", "active", + "updating", "inactive", "deprovisioning", "deleted", @@ -77374,13 +82538,248 @@ "DataPlaneStatusProvisioning", "DataPlaneStatusProvisioningFailed", "DataPlaneStatusActive", + "DataPlaneStatusUpdating", "DataPlaneStatusInactive", "DataPlaneStatusDeprovisioning", "DataPlaneStatusDeleted", "DataPlaneStatusRevoked" ] }, - "directories.CommitInfo": { + "data_planes.UpdateDataPlaneFirewallSettings": { + "type": "object", + "properties": { + "allow_http": { + "type": "boolean" + }, + "allowed_cidrs": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "integer" + } + } + }, + "allowed_domains": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "data_planes.UpdateDataPlaneFleetOIDCSettings": { + "type": "object", + "properties": { + "audience": { + "type": "string" + }, + "email_claim": { + "type": "string" + }, + "groups_claim": { + "type": "string" + }, + "is_enabled": { + "type": "boolean" + }, + "issuer_url": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "subject_claim": { + "type": "string" + }, + "tenant_claim": { + "type": "string" + }, + "tenant_mappings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "data_planes.UpdateDataPlaneRequest": { + "type": "object", + "properties": { + "firewall": { + "$ref": "#/components/schemas/data_planes.UpdateDataPlaneFirewallSettings" + }, + "fleet_oidc": { + "$ref": "#/components/schemas/data_planes.UpdateDataPlaneFleetOIDCSettings" + }, + "maintenance_window": { + "description": "MaintenanceWindow is a weekly UTC window: two hours on AWS and GCP, or four hours on Azure.", + "type": "string" + }, + "ttl": { + "$ref": "#/components/schemas/data_planes.UpdateDataPlaneTTLSettings" + } + } + }, + "data_planes.UpdateDataPlaneTTLSettings": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "long_days": { + "type": "integer" + }, + "short_days": { + "type": "integer" + } + } + }, + "datasets.V2DatasetsExperimentRunsRequestBody": { + "type": "object", + "properties": { + "comparative_experiment_id": { + "description": "`comparative_experiment_id` scopes pairwise-annotation feedback (optional).", + "type": "string" + }, + "cursor": { + "description": "`cursor` is the opaque string from a previous response's `next_cursor`. Absent for the first page.", + "type": "string" + }, + "example_ids": { + "description": "`example_ids` optionally restricts the page to these dataset example UUIDs (max 1000).", + "type": "array", + "items": { + "type": "string" + } + }, + "experiment_ids": { + "description": "`experiment_ids` lists the experiment (tracing session) UUIDs to query. Required, non-empty.", + "type": "array", + "items": { + "type": "string" + } + }, + "filters": { + "description": "`filters` maps a project (session) UUID string to a list of filter expressions (optional).", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "page_size": { + "description": "`page_size` is the maximum number of examples to return. Defaults to 20, max 100.", + "type": "integer" + }, + "selects": { + "description": "`selects` lists which run properties to include. Omitted => only `id`. Tokens mirror /v2/runs/query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/query.RunSelectField" + } + }, + "sort": { + "description": "`sort` controls feedback-score sorting (single project only).", + "allOf": [ + { + "$ref": "#/components/schemas/datasets.V2DatasetsExperimentRunsSort" + } + ] + } + } + }, + "datasets.V2DatasetsExperimentRunsResponseBody": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/datasets.V2ExampleWithRuns" + } + }, + "next_cursor": { + "type": "string" + } + } + }, + "datasets.V2DatasetsExperimentRunsSort": { + "type": "object", + "properties": { + "by": { + "description": "`by` is the feedback selector, e.g. `feedback.correctness` (the `feedback.` prefix is optional).", + "type": "string" + }, + "order": { + "description": "`order` is `ASC` or `DESC` (defaults to `DESC`).", + "type": "string" + } + } + }, + "datasets.V2ExampleWithRuns": { + "type": "object", + "properties": { + "attachment_urls": { + "description": "`attachment_urls` maps each attachment name to a pre-signed download URL.", + "type": "object" + }, + "created_at": { + "description": "`created_at` is when the example was created (RFC3339 date-time).", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:30:00.000Z" + }, + "dataset_id": { + "description": "`dataset_id` is the parent dataset UUID.", + "type": "string", + "format": "uuid", + "example": "0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328" + }, + "id": { + "description": "`id` is the dataset example UUID.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" + }, + "inputs": { + "description": "`inputs` is the example input payload (arbitrary JSON object).", + "type": "object" + }, + "metadata": { + "description": "`metadata` is arbitrary user-defined JSON metadata on the example.", + "type": "object" + }, + "modified_at": { + "description": "`modified_at` is when the example was last modified (RFC3339 date-time).", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:30:00.000Z" + }, + "name": { + "description": "`name` is the example's optional name.", + "type": "string" + }, + "outputs": { + "description": "`outputs` is the example reference-output payload (arbitrary JSON object).", + "type": "object" + }, + "runs": { + "description": "`runs` is the list of experiment runs produced for this example.", + "type": "array", + "items": { + "$ref": "#/components/schemas/query.RunResponse" + } + }, + "source_run_id": { + "description": "`source_run_id` is the run UUID the example was created from, if any.", + "type": "string", + "format": "uuid" + } + } + }, + "directory.CommitInfo": { "type": "object", "properties": { "commit_hash": { @@ -77394,53 +82793,117 @@ } } }, - "directories.CommitResponse": { + "directory.CommitResponse": { "type": "object", "properties": { "commit": { - "$ref": "#/components/schemas/directories.CommitInfo" + "$ref": "#/components/schemas/directory.CommitInfo" } } }, - "directories.CreateDirectoryCommitRequest": { + "directory.CreateDirectoryCommitRequest": { "type": "object", "properties": { "files": { - "description": "Files maps path to an Entry (object = create/update/link, null = delete/unlink).", - "type": "object", - "additionalProperties": {} + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/components/schemas/directory.DirectoryEntryInput" + }, + { + "type": "null" + } + ] + }, + "description": "Paths to create, update, link, delete, or unlink. Use null to delete or unlink an existing path.", + "type": "object" }, "parent_commit": { "type": "string" + }, + "skip_webhooks": { + "description": "SkipWebhooks suppresses Context Hub commit webhooks for this commit.", + "type": "boolean" + } + }, + "example": { + "files": { + "skills/current": { + "type": "skill", + "repo_handle": "shared-skill", + "selector": { + "type": "LATEST" + } + }, + "agents/pinned": { + "type": "agent", + "repo_handle": "review-agent", + "selector": { + "type": "COMMIT", + "commit_id": "0198f3ab-7c2d-7def-8a91-23456789abcd" + } + } } } }, - "directories.GetDirectoryResponse": { + "directory.GetDirectoryResponse": { "type": "object", "properties": { "commit_hash": { "type": "string" }, "commit_id": { + "format": "uuid", "type": "string" }, "files": { - "type": "object", - "additionalProperties": {} + "additionalProperties": { + "$ref": "#/components/schemas/directory.DirectoryEntryOutput" + }, + "type": "object" } - } + }, + "required": [ + "commit_id", + "commit_hash", + "files" + ] }, - "engine_trial.trialResponseRequest": { + "directory.errorResponse": { "type": "object", + "required": [ + "detail", + "status", + "title", + "type" + ], "properties": { - "action": { + "code": { + "type": "string" + }, + "conflicting_path": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "path": { + "type": "string" + }, + "rule": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "title": { + "type": "string" + }, + "type": { "type": "string" } } }, - "errutil.InternalError": { - "type": "object" - }, "errutil.UserError": { "type": "object" }, @@ -77475,27 +82938,133 @@ "evaluators.CodeEvaluator": { "type": "object", "properties": { + "advanced_features_enabled": { + "type": "boolean" + }, "code": { "type": "string" }, + "code_evaluator_input": { + "description": "CodeEvaluatorInput is which thread data the evaluator receives.\nNull for run evaluators.", + "anyOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/evaluators.CodeEvaluatorInput" + } + ] + }, + { + "type": "null" + } + ] + }, + "dependencies": { + "type": "string" + }, + "evaluator_build_error": { + "type": "string" + }, + "evaluator_build_status": { + "$ref": "#/components/schemas/evaluators.EvaluatorBuildStatus" + }, "evaluator_id": { "type": "string" }, "language": { "description": "Default: \"python\"", "type": "string" + }, + "managed_code_evaluator_key": { + "$ref": "#/components/schemas/evaluators.ManagedCodeEvaluatorKey" + }, + "managed_code_evaluator_settings": { + "$ref": "#/components/schemas/evaluators.ManagedCodeEvaluatorSettings" + }, + "require_attachments": { + "description": "RequireAttachments opts the evaluator into selecting/presigning run\nattachments (s3_urls) at evaluation time. Default false.", + "type": "boolean" + }, + "workspace_secrets_keys": { + "description": "WorkspaceSecretsKeys names the workspace secrets this evaluator may use.\nEach is sent as a header on requests to the hosts allowed for that\nsecret; evaluator code never sees the value. Requires\nadvanced_features_enabled, and each secret needs an allowed host with a\nheader.", + "type": "array", + "items": { + "type": "string" + } } } }, + "evaluators.CodeEvaluatorInput": { + "type": "string", + "enum": [ + "thread", + "all_messages", + "human_ai_pairs", + "first_human_last_ai", + "trajectory" + ], + "x-enum-varnames": [ + "CodeEvaluatorInputThread", + "CodeEvaluatorInputAllMessages", + "CodeEvaluatorInputHumanAIPairs", + "CodeEvaluatorInputFirstHumanLastAI", + "CodeEvaluatorInputTrajectory" + ] + }, "evaluators.CreateCodeEvaluatorRequest": { "type": "object", "properties": { + "advanced_features_enabled": { + "type": "boolean" + }, "code": { "type": "string" }, + "code_evaluator_input": { + "description": "CodeEvaluatorInput is which thread data the evaluator receives.\nNull or omitted for run evaluators.", + "anyOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/evaluators.CodeEvaluatorInput" + } + ] + }, + { + "type": "null" + } + ] + }, + "dependencies": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, "language": { "description": "Default: \"python\"", "type": "string" + }, + "managed_code_evaluator_key": { + "$ref": "#/components/schemas/evaluators.ManagedCodeEvaluatorKey" + }, + "managed_code_evaluator_settings": { + "$ref": "#/components/schemas/evaluators.ManagedCodeEvaluatorSettings" + }, + "require_attachments": { + "description": "RequireAttachments opts the evaluator into selecting/presigning run\nattachments (s3_urls) at evaluation time. Default false.", + "type": "boolean" + }, + "workspace_secrets_keys": { + "description": "WorkspaceSecretsKeys names the workspace secrets this evaluator may use.\nEach is sent as a header on requests to the hosts allowed for that\nsecret; evaluator code never sees the value. Requires\nadvanced_features_enabled, and each secret needs an allowed host with a\nheader.", + "type": "array", + "items": { + "type": "string" + } } } }, @@ -77530,6 +83099,10 @@ "commit_hash_or_tag": { "type": "string" }, + "playground_settings_id": { + "description": "Model Configuration ID", + "type": "string" + }, "prompt_repo_handle": { "type": "string" }, @@ -77568,6 +83141,10 @@ "id": { "type": "string" }, + "is_managed": { + "description": "IsManaged marks a LangChain Tuned Evaluator (currently the tuned\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": [ @@ -77596,6 +83173,21 @@ } } }, + "evaluators.EvaluatorBuildStatus": { + "type": "string", + "enum": [ + "ENQUEUED", + "BUILDING", + "READY", + "FAILED" + ], + "x-enum-varnames": [ + "EvaluatorBuildStatusEnqueued", + "EvaluatorBuildStatusBuilding", + "EvaluatorBuildStatusReady", + "EvaluatorBuildStatusFailed" + ] + }, "evaluators.EvaluatorRunRule": { "type": "object", "properties": { @@ -77632,7 +83224,7 @@ ] }, "spend_usd": { - "description": "Per-rule spend for the current ISO week (omitted when feature is disabled).\nLLM-evaluator rules are initialized to 0; code-evaluator rules remain nil.", + "description": "Per-rule usage for the current ISO week (omitted when feature is disabled).\nLLM-evaluator rules are initialized to 0; code-evaluator rules include trace counts only.", "type": "number" }, "trace_count": { @@ -77719,6 +83311,33 @@ } } }, + "evaluators.ManagedCodeEvaluatorKey": { + "type": "string", + "enum": [ + "voice_metrics" + ], + "x-enum-varnames": [ + "ManagedCodeEvaluatorKeyVoiceMetrics" + ] + }, + "evaluators.ManagedCodeEvaluatorMetricSetting": { + "type": "object", + "properties": { + "is_enabled": { + "type": "boolean", + "default": true + }, + "key_name": { + "type": "string" + } + } + }, + "evaluators.ManagedCodeEvaluatorSettings": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/evaluators.ManagedCodeEvaluatorMetricSetting" + } + }, "evaluators.SpendDay": { "type": "object", "properties": { @@ -77800,11 +83419,56 @@ "evaluators.UpdateCodeEvaluatorRequest": { "type": "object", "properties": { + "advanced_features_enabled": { + "type": "boolean" + }, "code": { "type": "string" }, + "code_evaluator_input": { + "description": "CodeEvaluatorInput is config (not a snapshot rebuild). Null clears it.", + "anyOf": [ + { + "type": "string", + "enum": [ + "thread", + "all_messages", + "human_ai_pairs", + "first_human_last_ai", + "trajectory" + ] + }, + { + "type": "null" + } + ] + }, + "dependencies": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, "language": { "type": "string" + }, + "managed_code_evaluator_settings": { + "$ref": "#/components/schemas/evaluators.ManagedCodeEvaluatorSettings" + }, + "require_attachments": { + "description": "RequireAttachments is fetch-time config: updating it does not rebuild\nthe sandbox snapshot.", + "type": "boolean" + }, + "workspace_secrets_keys": { + "description": "WorkspaceSecretsKeys names the workspace secrets this evaluator may use.\nEach is sent as a header on requests to the hosts allowed for that\nsecret; evaluator code never sees the value. Requires\nadvanced_features_enabled, and each secret needs an allowed host with a\nheader. Omit to keep the current list; [] clears it. Changing it does\nnot rebuild the evaluator.", + "type": "array", + "items": { + "type": "string" + } } } }, @@ -77839,6 +83503,10 @@ "num_few_shot_examples": { "type": "integer" }, + "playground_settings_id": { + "description": "Model Configuration ID", + "type": "string" + }, "prompt_repo_handle": { "type": "string" }, @@ -78039,1127 +83707,2034 @@ } } }, - "features.DisableModelRequest": { + "features.DisableModelRequest": { + "type": "object", + "properties": { + "model": { + "type": "string" + } + } + }, + "features.ErrorResponse": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, + "features.FeatureConfig": { + "type": "object", + "properties": { + "default_model": { + "type": "string" + }, + "disabled_models": { + "description": "DisabledModels is the effective disabled set for the feature: the union of\nthis workspace's own disabled providers/models and the org-wide disabled\nproviders. Every consumer (pickers, Fleet catalog) hides these.", + "type": "array", + "items": { + "type": "string" + } + }, + "feature": { + "type": "string" + }, + "org_disabled_providers": { + "description": "OrgDisabledProviders is the subset of DisabledModels that is enforced at the\norganization level. The workspace settings UI renders these locked so a\nworkspace admin cannot re-enable them.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "features.UpsertDefaultModelRequest": { + "type": "object", + "properties": { + "model": { + "type": "string" + } + } + }, + "gateway_policies.CreateGatewayPolicyRequest": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "config": { + "type": "object" + }, + "description": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "policy_type": { + "type": "string" + }, + "priority": { + "type": "integer" + }, + "subject_matchers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.SubjectMatcher" + } + } + } + }, + "gateway_policies.GatewayPolicyRecord": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "config": { + "type": "object" + }, + "created_at": { + "type": "string" + }, + "created_by": { + "type": "string" + }, + "current_spend": { + "description": "CurrentSpend is the list of spends recorded for each of the\ntracked spend limit windows, used in v2 of spend_cap policy type.", + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.SpendUsage" + } + }, + "current_spend_usd": { + "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" + }, + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + }, + "is_system_generated": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "organization_id": { + "type": "string" + }, + "parent_policy_id": { + "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": { + "type": "string" + }, + "priority": { + "type": "integer" + }, + "subject_matchers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.SubjectMatcher" + } + }, + "updated_at": { + "type": "string" + } + } + }, + "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": { + "policy_type": { + "type": "string" + }, + "subject_matcher_key": { + "type": "string" + }, + "subject_matcher_values": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "gateway_policies.SpendUsage": { + "type": "object", + "properties": { + "spend_usd": { + "description": "SpendUSD is the spend recorded in this window.", + "type": "number" + }, + "window": { + "description": "Window is the spend limit period.", + "type": "string" + } + } + }, + "gateway_policies.SubjectMatcher": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "gateway_policies.UpdateGatewayPolicyRequest": { + "type": "object", + "properties": { + "action": { + "type": "string", + "example": "block" + }, + "config": { + "type": "object" + }, + "description": { + "type": "string", + "example": "Blocks overspend on the production org" + }, + "enabled": { + "type": "boolean", + "example": true + }, + "name": { + "type": "string", + "example": "monthly-cap" + }, + "priority": { + "type": "integer", + "example": 0 + }, + "subject_matchers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/gateway_policies.SubjectMatcher" + } + } + } + }, + "gateway_policies.errorResponse": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, + "httperr.ErrorResponse": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + }, + "hub_environments.CreateEnvironmentsRequest": { + "type": "object", + "required": [ + "environments" + ], + "properties": { + "environments": { + "type": "array", + "maxItems": 4, + "minItems": 1, + "items": { + "$ref": "#/components/schemas/hub_environments.EnvironmentEntry" + } + } + } + }, + "hub_environments.EnvironmentEntry": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "maxLength": 64, + "minLength": 1 + } + } + }, + "hub_environments.ErrorResponse": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, + "hub_environments.HubEnvironmentsModel": { + "type": "object", + "properties": { + "environments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/hub_environments.EnvironmentEntry" + } + }, + "id": { + "type": "string" + } + } + }, + "hub_environments.UpdateEnvironmentsRequest": { + "type": "object", + "required": [ + "environments" + ], + "properties": { + "environments": { + "type": "array", + "maxItems": 4, + "items": { + "$ref": "#/components/schemas/hub_environments.EnvironmentEntry" + } + } + } + }, + "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" + }, + "billing_installation_id": { + "description": "BillingInstallationID is the persistent per-installation identity for\nself-hosted deployments.", + "type": "string" + }, + "customer_info": { + "$ref": "#/components/schemas/info.CustomerInfo" + }, + "engine_github_web_base_url": { + "type": "string", + "format": "uri" + }, + "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": { + "integration_catalog": { + "type": "array", + "items": { + "$ref": "#/components/schemas/integrations.IntegrationCatalogEntry" + } + }, + "integration_overrides": { + "type": "array", + "items": { + "$ref": "#/components/schemas/integrations.IntegrationOverride" + } + }, + "integrations_enabled_by_default": { + "type": "boolean" + } + } + }, + "integrations.AgentBuilderIntegrationsUpdatePayload": { + "type": "object", + "properties": { + "integration_overrides": { + "type": "array", + "items": { + "$ref": "#/components/schemas/integrations.IntegrationOverrideUpdate" + } + }, + "integrations_enabled_by_default": { + "type": "boolean" + } + } + }, + "integrations.IntegrationCatalogEntry": { + "type": "object", + "properties": { + "can_invoke": { + "type": "boolean" + }, + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + } + } + }, + "integrations.IntegrationOverride": { "type": "object", "properties": { - "model": { + "integration_key": { "type": "string" + }, + "is_enabled": { + "type": "boolean" } } }, - "features.ErrorResponse": { + "integrations.IntegrationOverrideUpdate": { "type": "object", "properties": { - "error": { + "integration_key": { "type": "string" + }, + "is_enabled": { + "type": "boolean" } } }, - "features.FeatureConfig": { + "issues.ErrorResponse": { "type": "object", "properties": { - "default_model": { - "type": "string" - }, - "disabled_models": { - "type": "array", - "items": { - "type": "string" - } - }, - "feature": { + "error": { "type": "string" } } }, - "features.UpsertDefaultModelRequest": { + "issues.Evidence": { "type": "object", + "required": [ + "type" + ], "properties": { - "model": { - "type": "string" + "series": { + "$ref": "#/components/schemas/issues.SeriesEvidence" + }, + "type": { + "$ref": "#/components/schemas/issues.EvidenceType" } } }, - "gateway_policies.CreateGatewayPolicyRequest": { + "issues.EvidenceType": { + "type": "string", + "enum": [ + "series" + ], + "x-enum-varnames": [ + "EvidenceTypeSeries" + ] + }, + "issues.Fix": { "type": "object", + "required": [ + "branch", + "created_at", + "id", + "pr_number", + "repo_url", + "updated_at" + ], "properties": { - "action": { - "type": "string" + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "config": { - "type": "object" + "created_at": { + "type": "string", + "format": "date-time" }, - "description": { + "id": { "type": "string" }, - "enabled": { - "type": "boolean" - }, - "name": { - "type": "string" + "pr_number": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] }, - "policy_type": { + "repo_url": { "type": "string" }, - "priority": { - "type": "integer" - }, - "subject_matchers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/gateway_policies.SubjectMatcher" - } + "updated_at": { + "type": "string", + "format": "date-time" } } }, - "gateway_policies.GatewayPolicyRecord": { + "issues.Issue": { "type": "object", "properties": { - "action": { - "type": "string" + "actions": { + "type": "object" }, - "config": { + "auto_resolution_evidence": { "type": "object" }, + "auto_resolution_state": { + "description": "Nil unless eligible: \"auto_close\" or \"prompt\". Evidence carries the deciding gate.", + "type": "string" + }, "created_at": { "type": "string" }, - "created_by": { + "description": { "type": "string" }, - "current_spend_usd": { - "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" + "evidence": { + "description": "Nil for the trace-list issues that are the norm.", + "anyOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/issues.Evidence" + } + ] + }, + { + "type": "null" + } + ] }, - "description": { + "first_seen_at": { "type": "string" }, - "enabled": { - "type": "boolean" + "fix_branch": { + "description": "Legacy: branch of the oldest fix in the board's oldest connected repository.", + "type": "string" }, - "id": { + "fix_dispatched_at": { "type": "string" }, - "is_system_generated": { - "type": "boolean" + "fix_pr_number": { + "type": "integer" }, - "name": { + "fix_prompt": { + "description": "Issue-level: the problem every fix shares, and the last time a fix run\nwas dispatched for this issue — one run works several fixes.", "type": "string" }, - "organization_id": { + "fix_verification": { + "$ref": "#/components/schemas/issues.IssueFixVerification" + }, + "fixes": { + "description": "Newest first.", + "type": "array", + "items": { + "$ref": "#/components/schemas/issues.Fix" + } + }, + "id": { "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.", + "last_seen_at": { "type": "string" }, - "policy_type": { + "linear_context": { + "$ref": "#/components/schemas/issues.LinearContext" + }, + "linear_sync": { + "$ref": "#/components/schemas/issues.LinearSync" + }, + "name": { "type": "string" }, - "priority": { + "proposed_context_fixes": { + "type": "array", + "items": { + "type": "object" + } + }, + "proposed_examples": { + "type": "array", + "items": { + "type": "object" + } + }, + "proposed_fix": { + "type": "string" + }, + "proposed_prompt_fixes": { + "type": "array", + "items": { + "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" }, - "subject_matchers": { + "session_id": { + "type": "string" + }, + "severity": { + "$ref": "#/components/schemas/issues.Severity" + }, + "status": { + "$ref": "#/components/schemas/issues.Status" + }, + "tags": { "type": "array", "items": { - "$ref": "#/components/schemas/gateway_policies.SubjectMatcher" + "type": "string" } }, + "tenant_id": { + "type": "string" + }, + "traces": { + "type": "object" + }, "updated_at": { "type": "string" + }, + "validation_result": { + "$ref": "#/components/schemas/issues.IssueValidationResult" + }, + "watching_since": { + "type": "string" } } }, - "gateway_policies.SubjectMatcher": { + "issues.IssueFixVerification": { "type": "object", "properties": { - "key": { - "type": "string" + "attempt": { + "type": "integer" }, - "value": { + "baseline_experiment_id": { + "type": "string", + "format": "uuid" + }, + "dataset_id": { + "type": "string", + "format": "uuid" + }, + "parent_deployment_id": { + "type": "string", + "format": "uuid" + }, + "preview_deployment_id": { + "type": "string", + "format": "uuid" + }, + "preview_experiment_id": { + "type": "string", + "format": "uuid" + }, + "reason": { "type": "string" + }, + "root_trace_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string", + "enum": [ + "awaiting_preview", + "verifying", + "passed", + "failed", + "inconclusive", + "timeout", + "error" + ] + }, + "updated_at": { + "type": "string", + "format": "date-time" } } }, - "gateway_policies.UpdateGatewayPolicyRequest": { + "issues.IssueValidationResult": { "type": "object", "properties": { - "action": { + "active_revision_id": { "type": "string", - "example": "block" + "format": "uuid" }, - "config": { - "type": "object" + "baseline_experiment_id": { + "type": "string", + "format": "uuid" }, - "description": { + "completed_at": { "type": "string", - "example": "Blocks overspend on the production org" + "format": "date-time" }, - "enabled": { - "type": "boolean", - "example": true + "dataset_id": { + "type": "string", + "format": "uuid" }, - "name": { + "deployment_id": { "type": "string", - "example": "monthly-cap" + "format": "uuid" }, - "priority": { - "type": "integer", - "example": 0 + "outcome": { + "type": "string", + "enum": [ + "reproduced", + "not_reproduced", + "inconclusive", + "error" + ] }, - "subject_matchers": { + "reason": { + "type": "string" + }, + "root_trace_ids": { "type": "array", "items": { - "$ref": "#/components/schemas/gateway_policies.SubjectMatcher" + "type": "string" } } } }, - "gateway_policies.errorResponse": { + "issues.LinearContext": { "type": "object", "properties": { - "error": { + "github_pr_urls": { + "type": "array", + "items": { + "type": "string" + } + }, + "workflow_state": { "type": "string" } } }, - "github_app.ErrorResponse": { + "issues.LinearSync": { "type": "object", "properties": { - "error": { + "identifier": { + "type": "string" + }, + "issue_id": { + "type": "string" + }, + "last_attempted_at": { + "type": "string", + "format": "date-time" + }, + "last_error": { + "type": "string" + }, + "last_synced_at": { + "type": "string", + "format": "date-time" + }, + "linear_issue_id": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "pending", + "synced", + "failed", + "auth_required", + "paused" + ] + }, + "url": { "type": "string" } } }, - "github_app.InstallLinkResponse": { + "issues.ListViewsResponse": { "type": "object", "properties": { - "install_url": { - "type": "string" + "views": { + "type": "array", + "items": { + "$ref": "#/components/schemas/issues.ViewedIssue" + } } } }, - "github_app.Installation": { + "issues.SeriesEvidence": { "type": "object", + "required": [ + "metric_definition" + ], "properties": { - "account_login": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "id": { - "type": "string" + "metric_definition": { + "$ref": "#/components/schemas/runsanalytics.MetricDefinition" }, - "installation_id": { + "run_filter": { + "description": "Narrows what is measured; the renderer ANDs its root scope over it.", "type": "string" }, - "metadata": { - "type": "object" + "window_end": { + "type": "string", + "format": "date-time" }, - "organization_id": { + "window_start": { + "description": "The view the chart opens at, not a clamp. Start alone renders start -> now.", + "type": "string", + "format": "date-time" + } + } + }, + "issues.Severity": { + "type": "integer", + "enum": [ + 0, + 1, + 2, + 3 + ], + "x-enum-varnames": [ + "SeverityUrgent", + "SeverityHigh", + "SeverityMed", + "SeverityLow" + ] + }, + "issues.Status": { + "type": "string", + "enum": [ + "open", + "fixing", + "watching", + "completed", + "ignored" + ], + "x-enum-varnames": [ + "StatusOpen", + "StatusFixing", + "StatusWatching", + "StatusCompleted", + "StatusIgnored" + ] + }, + "issues.ViewedIssue": { + "type": "object", + "properties": { + "issue_id": { "type": "string" }, - "provider": { + "viewed_at": { "type": "string" + } + } + }, + "mcp_vendors.ArcadeAccountOrg": { + "type": "object", + "properties": { + "is_default": { + "type": "boolean" }, - "updated_at": { + "name": { "type": "string" }, - "user_id": { + "organization_id": { "type": "string" } } }, - "github_app.Repository": { + "mcp_vendors.ArcadeAccountProject": { "type": "object", "properties": { - "default_branch": { - "type": "string" + "is_default": { + "type": "boolean" }, - "full_name": { + "name": { "type": "string" }, - "html_url": { + "organization_id": { "type": "string" }, - "id": { - "type": "integer" - }, - "name": { + "project_id": { "type": "string" - }, - "private": { - "type": "boolean" } } }, - "github_app.TokenRequest": { + "mcp_vendors.ArcadeAccountResponseList": { "type": "object", "properties": { - "repository": { - "type": "string" + "organizations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountOrg" + } }, - "type": { - "type": "string" + "projects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountProject" + } } } }, - "github_app.UpdateUserConnectionRequest": { + "mcp_vendors.ArcadeSettingsRequest": { "type": "object", "properties": { - "actor_preference": { + "organization_id": { + "type": "string" + }, + "project_id": { "type": "string" } } }, - "github_app.UserAuthLinkResponse": { + "mcp_vendors.ArcadeSettingsResponse": { "type": "object", "properties": { - "auth_url": { + "is_configured": { + "type": "boolean" + }, + "organization_id": { + "type": "string" + }, + "project_id": { "type": "string" } } }, - "github_app.UserConnectionMetadata": { + "mcp_vendors.ErrorResponse": { "type": "object", "properties": { - "github_username": { + "detail": { + "type": "string" + }, + "message": { "type": "string" } } }, - "github_app.UserConnectionStatus": { + "mcp_vendors.GetMcpVendorResponse": { "type": "object", "properties": { - "actor_preference": { + "description": { "type": "string" }, - "is_connected": { - "type": "boolean" + "icon": { + "type": "string" }, - "metadata": { - "$ref": "#/components/schemas/github_app.UserConnectionMetadata" + "name": { + "type": "string" }, - "type": { + "provider_id": { + "type": "string" + }, + "settings": {}, + "status": { + "$ref": "#/components/schemas/mcp_vendors.McpVendorStatus" + }, + "vendor_id": { "type": "string" } } }, - "github_app.UserTokenResponse": { + "mcp_vendors.ListMcpGatewaysResponse": { "type": "object", "properties": { - "expires_at": { - "type": "string" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/mcp_vendors.McpGateway" + } }, - "token": { - "type": "string" + "limit": { + "type": "integer" }, - "token_type": { - "type": "string" + "offset": { + "type": "integer" + }, + "page_count": { + "type": "integer" + }, + "total_count": { + "type": "integer" } } }, - "hub_environments.CreateEnvironmentsRequest": { + "mcp_vendors.ListMcpVendorsResponse": { "type": "object", - "required": [ - "environments" - ], "properties": { - "environments": { + "mcp_vendors": { "type": "array", - "maxItems": 4, - "minItems": 1, "items": { - "$ref": "#/components/schemas/hub_environments.EnvironmentEntry" + "$ref": "#/components/schemas/mcp_vendors.McpVendor" } } } }, - "hub_environments.EnvironmentEntry": { + "mcp_vendors.ListVendorToolsResponse": { "type": "object", - "required": [ - "name" - ], "properties": { - "name": { - "type": "string", - "maxLength": 64, - "minLength": 1 + "limit": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "tools": { + "type": "array", + "items": { + "$ref": "#/components/schemas/mcp_vendors.VendorTool" + } + }, + "total": { + "type": "integer" } } }, - "hub_environments.ErrorResponse": { + "mcp_vendors.McpGateway": { "type": "object", "properties": { - "error": { + "auth_type": { + "type": "string" + }, + "binding": { + "$ref": "#/components/schemas/mcp_vendors.McpGatewayBinding" + }, + "created_at": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "instructions": { + "type": "string" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tool_filter": { + "$ref": "#/components/schemas/mcp_vendors.McpGatewayToolFilter" + }, + "updated_at": { "type": "string" } } }, - "hub_environments.HubEnvironmentsModel": { + "mcp_vendors.McpGatewayBinding": { "type": "object", "properties": { - "environments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/hub_environments.EnvironmentEntry" - } - }, "id": { "type": "string" + }, + "type": { + "type": "string" } } }, - "hub_environments.UpdateEnvironmentsRequest": { + "mcp_vendors.McpGatewayToolFilter": { "type": "object", - "required": [ - "environments" - ], "properties": { - "environments": { + "allowed_tools": { "type": "array", - "maxItems": 4, "items": { - "$ref": "#/components/schemas/hub_environments.EnvironmentEntry" + "type": "string" } } } }, - "integrations.AgentBuilderIntegrationsPayload": { + "mcp_vendors.McpVendor": { "type": "object", "properties": { - "integration_catalog": { - "type": "array", - "items": { - "$ref": "#/components/schemas/integrations.IntegrationCatalogEntry" - } + "description": { + "type": "string" }, - "integration_overrides": { - "type": "array", - "items": { - "$ref": "#/components/schemas/integrations.IntegrationOverride" - } + "icon": { + "type": "string" }, - "integrations_enabled_by_default": { - "type": "boolean" - } - } - }, - "integrations.AgentBuilderIntegrationsUpdatePayload": { - "type": "object", - "properties": { - "integration_overrides": { - "type": "array", - "items": { - "$ref": "#/components/schemas/integrations.IntegrationOverrideUpdate" - } + "name": { + "type": "string" }, - "integrations_enabled_by_default": { - "type": "boolean" - } - } - }, - "integrations.AuthMethod": { - "type": "object", - "properties": { - "provider_match": { - "$ref": "#/components/schemas/integrations.ProviderMatch" + "status": { + "$ref": "#/components/schemas/mcp_vendors.McpVendorStatus" }, - "type": { - "$ref": "#/components/schemas/integrations.AuthType" + "vendor_id": { + "type": "string" } } }, - "integrations.AuthType": { + "mcp_vendors.McpVendorStatus": { "type": "string", "enum": [ - "oauth2", - "headers", - "api_key", - "none" + "enabled", + "disabled" ], "x-enum-varnames": [ - "AuthTypeOAuth2", - "AuthTypeHeaders", - "AuthTypeAPIKey", - "AuthTypeNone" + "McpVendorStatusEnabled", + "McpVendorStatusDisabled" ] }, - "integrations.CreateRequest": { + "mcp_vendors.VendorTool": { "type": "object", - "required": [ - "name", - "url" - ], "properties": { - "category": { - "type": "string" - }, "description": { "type": "string" }, - "icon_url": { - "type": "string" - }, "name": { "type": "string" - }, - "source": { - "type": "string" - }, - "url": { - "type": "string" } } }, - "integrations.ErrorResponse": { + "oauth.AuthorizationServerMetadata": { "type": "object", "properties": { - "code": { - "type": "string" - }, - "detail": { + "authorization_endpoint": { "type": "string" }, - "status": { - "type": "integer" + "code_challenge_methods_supported": { + "type": "array", + "items": { + "type": "string" + } }, - "type": { + "device_authorization_endpoint": { "type": "string" - } - } - }, - "integrations.Integration": { - "type": "object", - "properties": { - "auth_methods": { + }, + "grant_types_supported": { "type": "array", "items": { - "$ref": "#/components/schemas/integrations.AuthMethod" + "type": "string" } }, - "category": { + "issuer": { "type": "string" }, - "created_at": { + "jwks_uri": { "type": "string" }, - "description": { + "protected_resources_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "registration_endpoint": { "type": "string" }, - "enabled": { + "resource_parameter_supported": { "type": "boolean" }, - "icon_url": { + "response_types_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "revocation_endpoint": { "type": "string" }, - "id": { + "scopes_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "token_endpoint": { "type": "string" }, - "name": { + "token_endpoint_auth_methods_supported": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "oauth.AuthorizedAppView": { + "type": "object", + "properties": { + "authorized_at": { "type": "string" }, - "source": { + "client_id": { "type": "string" }, - "transport": { - "$ref": "#/components/schemas/integrations.Transport" + "client_name": { + "type": "string" }, - "updated_at": { + "client_uri": { "type": "string" }, - "url": { + "logo_uri": { "type": "string" + }, + "scopes": { + "type": "array", + "items": { + "type": "string" + } } } }, - "integrations.IntegrationCatalogEntry": { + "oauth.ClientPublicMetadata": { "type": "object", "properties": { - "can_invoke": { - "type": "boolean" + "client_id": { + "type": "string" }, - "display_name": { + "client_name": { "type": "string" }, - "id": { + "client_uri": { "type": "string" }, - "key": { + "logo_uri": { "type": "string" - } - } - }, - "integrations.IntegrationOverride": { - "type": "object", - "properties": { - "integration_key": { + }, + "policy_uri": { "type": "string" }, - "is_enabled": { - "type": "boolean" + "tos_uri": { + "type": "string" } } }, - "integrations.IntegrationOverrideUpdate": { + "oauth.ClientRegistrationRequest": { "type": "object", "properties": { - "integration_key": { + "client_name": { "type": "string" }, - "is_enabled": { - "type": "boolean" - } - } - }, - "integrations.ListResponse": { - "type": "object", - "properties": { - "items": { + "client_uri": { + "type": "string" + }, + "grant_types": { "type": "array", "items": { - "$ref": "#/components/schemas/integrations.Integration" + "type": "string" } }, - "next_cursor": { + "logo_uri": { "type": "string" - } - } - }, - "integrations.MatchBy": { - "type": "string", - "enum": [ - "kind", - "id" - ], - "x-enum-varnames": [ - "MatchByKind", - "MatchByID" - ] - }, - "integrations.ProviderMatch": { - "type": "object", - "properties": { - "by": { - "$ref": "#/components/schemas/integrations.MatchBy" }, - "value": { + "policy_uri": { "type": "string" - } - } - }, - "integrations.ReplaceAuthMethodsRequest": { - "type": "object", - "properties": { - "auth_methods": { + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + } + }, + "response_types": { "type": "array", "items": { - "$ref": "#/components/schemas/integrations.AuthMethod" + "type": "string" } + }, + "scope": { + "type": "string" + }, + "token_endpoint_auth_method": { + "type": "string" + }, + "tos_uri": { + "type": "string" } } }, - "integrations.Transport": { - "type": "string", - "enum": [ - "mcp_http" - ], - "x-enum-varnames": [ - "TransportMCPHTTP" - ] - }, - "integrations.UpdateRequest": { + "oauth.ClientRegistrationResponse": { "type": "object", "properties": { - "category": { + "client_id": { "type": "string" }, - "description": { + "client_id_issued_at": { + "type": "integer" + }, + "client_name": { "type": "string" }, - "enabled": { - "type": "boolean" + "client_uri": { + "type": "string" + }, + "grant_types": { + "type": "array", + "items": { + "type": "string" + } }, - "icon_url": { + "logo_uri": { "type": "string" }, - "name": { + "policy_uri": { + "type": "string" + }, + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + } + }, + "response_types": { + "type": "array", + "items": { + "type": "string" + } + }, + "token_endpoint_auth_method": { + "type": "string" + }, + "tos_uri": { "type": "string" } } }, - "issues_agent_usage.LCUSpendErrorResponse": { + "oauth.CreateOAuthClientRequest": { "type": "object", "properties": { - "error": { + "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" } } }, - "issues_agent_usage.LCUSpendItem": { + "oauth.DeviceCodeResponse": { "type": "object", "properties": { - "lcu_total": { + "device_code": { "type": "string" }, - "lcu_unpriced_row_count": { + "expires_in": { "type": "integer" }, - "session_id": { + "interval": { + "type": "integer" + }, + "user_code": { "type": "string" }, - "session_name": { + "verification_uri": { "type": "string" }, - "tenant_id": { + "verification_uri_complete": { + "description": "The verification URI with the user code included, so the user confirms\nthe code instead of typing it (RFC 8628 §3.3.1).", "type": "string" + } + } + }, + "oauth.OAuthClientCredentialsResponse": { + "type": "object", + "properties": { + "client": { + "$ref": "#/components/schemas/oauth.OAuthClientView" }, - "tenant_name": { + "client_secret": { "type": "string" } } }, - "issues_agent_usage.LCUSpendResponse": { + "oauth.OAuthClientListResponse": { "type": "object", "properties": { - "items": { + "clients": { + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth.OAuthClientView" + } + } + } + }, + "oauth.OAuthClientView": { + "type": "object", + "properties": { + "allowed_scopes": { "type": "array", "items": { - "$ref": "#/components/schemas/issues_agent_usage.LCUSpendItem" + "type": "string" } }, - "organization_id": { + "client_id": { "type": "string" }, - "period_end": { + "client_name": { "type": "string" }, - "period_start": { + "client_type": { "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.", + "client_uri": { "type": "string" - } - } - }, - "langchain_com_smith_fleet_mcp_servers.AuthType": { - "type": "string", - "enum": [ - "headers", - "oauth" - ], - "x-enum-varnames": [ - "AuthTypeHeaders", - "AuthTypeOAuth" - ] - }, - "langchain_com_smith_fleet_mcp_servers.CreateMcpServerPayload": { - "type": "object", - "required": [ - "name", - "url" - ], - "properties": { - "auth_type": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.AuthType" }, - "external_system_id": { + "created_at": { "type": "string" }, - "headers": { + "disabled": { + "type": "boolean" + }, + "grant_types": { "type": "array", "items": { - "type": "object", - "additionalProperties": true + "type": "string" } }, - "name": { + "id": { "type": "string" }, - "oauth_mode": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.OAuthMode" + "logo_uri": { + "type": "string" }, - "oauth_provider_id": { + "policy_uri": { "type": "string" }, - "url": { + "redirect_uris": { + "type": "array", + "items": { + "type": "string" + } + }, + "tos_uri": { "type": "string" }, - "vendor_id": { + "updated_at": { "type": "string" } } }, - "langchain_com_smith_fleet_mcp_servers.McpServer": { + "oauth.OIDCProviderMetadata": { "type": "object", "properties": { - "auth_type": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.AuthType" - }, - "can_invoke": { - "type": "boolean" - }, - "created_at": { + "authorization_endpoint": { "type": "string" }, - "external_system_id": { - "type": "string" + "claims_supported": { + "type": "array", + "items": { + "type": "string" + } }, - "headers": { + "code_challenge_methods_supported": { "type": "array", "items": { - "type": "object", - "additionalProperties": true + "type": "string" } }, - "id": { - "type": "string" + "grant_types_supported": { + "type": "array", + "items": { + "type": "string" + } + }, + "id_token_signing_alg_values_supported": { + "type": "array", + "items": { + "type": "string" + } }, - "mcp_vendor_id": { + "issuer": { "type": "string" }, - "name": { + "jwks_uri": { "type": "string" }, - "oauth_mode": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.OAuthMode" + "response_types_supported": { + "type": "array", + "items": { + "type": "string" + } }, - "oauth_provider_id": { - "type": "string" + "scopes_supported": { + "type": "array", + "items": { + "type": "string" + } }, - "tenant_id": { - "type": "string" + "subject_types_supported": { + "type": "array", + "items": { + "type": "string" + } }, - "updated_at": { + "token_endpoint": { "type": "string" }, - "url": { - "type": "string" + "token_endpoint_auth_methods_supported": { + "type": "array", + "items": { + "type": "string" + } }, - "vendor_id": { + "userinfo_endpoint": { "type": "string" } } }, - "langchain_com_smith_fleet_mcp_servers.OAuthMode": { - "type": "string", - "enum": [ - "legacy_shared_provider", - "per_user_dynamic_client" - ], - "x-enum-varnames": [ - "OAuthModeLegacySharedProvider", - "OAuthModePerUserDynamicClient" - ] - }, - "langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderPayload": { + "oauth.TokenErrorResponse": { "type": "object", "properties": { - "ls_user_id": { - "description": "Deprecated: user identity is inferred from the authenticated request when available.", + "error": { + "type": "string" + }, + "error_description": { "type": "string" } } }, - "langchain_com_smith_fleet_mcp_servers.RegisterOAuthProviderResponse": { + "oauth.TokenResponse": { "type": "object", "properties": { - "oauth_provider_id": { + "access_token": { + "type": "string" + }, + "expires_in": { + "type": "integer" + }, + "id_token": { + "type": "string" + }, + "refresh_token": { + "type": "string" + }, + "token_type": { + "type": "string" + }, + "workspace_id": { "type": "string" } } }, - "langchain_com_smith_fleet_mcp_servers.UpdateMcpServerPayload": { + "oauth.UpdateOAuthClientRequest": { "type": "object", "properties": { - "auth_type": { - "$ref": "#/components/schemas/langchain_com_smith_fleet_mcp_servers.AuthType" + "allowed_scopes": { + "type": "array", + "items": { + "type": "string" + } }, - "headers": { + "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": "object", - "additionalProperties": true + "type": "string" } }, - "oauth_provider_id": { - "type": "string" - }, - "url": { + "tos_uri": { "type": "string" } } }, - "mcp_servers.McpServerAPIError": { + "oauth.UserinfoResponse": { "type": "object", "properties": { - "detail": { + "email": { "type": "string" }, - "error": { - "type": "string" - } - } - }, - "mcp_vendors.ArcadeAccountOrg": { - "type": "object", - "properties": { - "is_default": { + "email_verified": { "type": "boolean" }, - "name": { + "ls_org_id": { "type": "string" }, - "organization_id": { + "ls_org_name": { "type": "string" - } - } - }, - "mcp_vendors.ArcadeAccountProject": { - "type": "object", - "properties": { - "is_default": { - "type": "boolean" }, "name": { "type": "string" }, - "organization_id": { + "picture": { "type": "string" }, - "project_id": { + "sub": { "type": "string" } } }, - "mcp_vendors.ArcadeAccountResponseList": { - "type": "object", - "properties": { - "organizations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountOrg" - } - }, - "projects": { - "type": "array", - "items": { - "$ref": "#/components/schemas/mcp_vendors.ArcadeAccountProject" - } - } - } - }, - "mcp_vendors.ArcadeSettingsRequest": { + "orgs.LinkedLoginMethod": { "type": "object", "properties": { - "organization_id": { + "provider": { "type": "string" }, - "project_id": { + "provisioning": { + "description": "provisioning_method", "type": "string" } } }, - "mcp_vendors.ArcadeSettingsResponse": { + "orgs.ListOrgsResponse": { "type": "object", "properties": { - "is_configured": { - "type": "boolean" - }, - "organization_id": { - "type": "string" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/orgs.Org" + } }, - "project_id": { + "next_cursor": { "type": "string" } } }, - "mcp_vendors.ErrorResponse": { + "orgs.Org": { "type": "object", "properties": { - "detail": { + "display_name": { "type": "string" }, - "message": { + "id": { "type": "string" + }, + "is_personal": { + "type": "boolean" } } }, - "mcp_vendors.GetMcpVendorResponse": { + "orgs.OrgMemberEnriched": { "type": "object", "properties": { - "description": { + "avatar_url": { "type": "string" }, - "icon": { + "created_at": { "type": "string" }, - "name": { + "display_name": { + "description": "auth-resolved display name", "type": "string" }, - "provider_id": { + "email": { "type": "string" }, - "settings": {}, - "status": { - "$ref": "#/components/schemas/mcp_vendors.McpVendorStatus" - }, - "vendor_id": { + "id": { + "description": "identity_id or pending_identity_id", "type": "string" - } - } - }, - "mcp_vendors.ListMcpGatewaysResponse": { - "type": "object", - "properties": { - "items": { + }, + "is_disabled": { + "description": "user disabled", + "type": "boolean" + }, + "is_pending": { + "description": "true for pending invitations", + "type": "boolean" + }, + "linked_login_methods": { "type": "array", "items": { - "$ref": "#/components/schemas/mcp_vendors.McpGateway" + "$ref": "#/components/schemas/orgs.LinkedLoginMethod" } }, - "limit": { - "type": "integer" + "ls_user_id": { + "description": "nil for pending members", + "type": "string" }, - "offset": { - "type": "integer" + "role_id": { + "description": "org role", + "type": "string" }, - "page_count": { - "type": "integer" + "role_name": { + "description": "org role name", + "type": "string" }, - "total_count": { - "type": "integer" - } - } - }, - "mcp_vendors.ListMcpVendorsResponse": { - "type": "object", - "properties": { - "mcp_vendors": { + "scim_groups": { "type": "array", "items": { - "$ref": "#/components/schemas/mcp_vendors.McpVendor" + "$ref": "#/components/schemas/orgs.SCIMGroup" + } + }, + "workspace_memberships": { + "type": "array", + "items": { + "$ref": "#/components/schemas/orgs.WorkspaceMembership" } } } }, - "mcp_vendors.ListVendorToolsResponse": { + "orgs.OrganizationInfo": { "type": "object", "properties": { - "limit": { - "type": "integer" + "api_key_creation_from_api_keys_enabled": { + "type": "boolean" }, - "offset": { - "type": "integer" + "avatar_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, - "tools": { + "byoc_create_saas_workspace_enabled": { + "type": "boolean" + }, + "can_export_usage_backfill": { + "type": "boolean" + }, + "config": { + "$ref": "#/components/schemas/authn.OrganizationConfig" + }, + "default_sso_provision": { + "type": "boolean" + }, + "disabled": { + "type": "boolean" + }, + "disabled_model_providers": { "type": "array", "items": { - "$ref": "#/components/schemas/mcp_vendors.VendorTool" + "type": "string" } }, - "total": { - "type": "integer" - } - } - }, - "mcp_vendors.McpGateway": { - "type": "object", - "properties": { - "auth_type": { + "display_name": { "type": "string" }, - "binding": { - "$ref": "#/components/schemas/mcp_vendors.McpGatewayBinding" - }, - "created_at": { - "type": "string" + "engine_enabled": { + "type": "boolean" }, - "description": { + "engine_lcu_spend_limit_monthly": { + "description": "EngineLCUSpendLimitMonthly is the org admin (Layer 3) monthly Engine LCU spend\nlimit; null means the admin set no limit. The effective enforced limit is the\nminimum of this and the finance/plan limits carried on Config.", "type": "string" }, "id": { "type": "string" }, - "instructions": { - "type": "string" + "invites_enabled": { + "type": "boolean" }, - "name": { - "type": "string" + "ip_allowlist": { + "type": "array", + "items": { + "type": "string" + } }, - "slug": { - "type": "string" + "ip_allowlist_enabled": { + "type": "boolean" }, - "status": { - "type": "string" + "is_personal": { + "type": "boolean" }, - "tool_filter": { - "$ref": "#/components/schemas/mcp_vendors.McpGatewayToolFilter" + "jit_provisioning_enabled": { + "type": "boolean" }, - "updated_at": { - "type": "string" - } - } - }, - "mcp_vendors.McpGatewayBinding": { - "type": "object", - "properties": { - "id": { + "llm_auth_proxy_allowed_urls": { + "type": "array", + "items": { + "type": "string" + } + }, + "llm_auth_proxy_enabled": { + "type": "boolean" + }, + "llm_auth_proxy_jwt_audience": { "type": "string" }, - "type": { + "managed_eval_terms_accepted_at": { + "description": "ManagedEvalTermsAcceptedAt is the raw ISO 8601 timestamp string from the\nconfig JSONB of when an org admin accepted the tuned evaluator terms;\nnull if never accepted. Returned verbatim so the value is byte-identical\nto the smith-backend implementation under weighted routing.", "type": "string" - } - } - }, - "mcp_vendors.McpGatewayToolFilter": { - "type": "object", - "properties": { - "allowed_tools": { + }, + "managed_evals_enabled": { + "description": "ManagedEvalsEnabled is the org-level consent flag for tuned evaluators\n(evaluators that spend a LangChain-held provider key).", + "type": "boolean" + }, + "marketplace_payouts_enabled": { + "type": "boolean" + }, + "max_api_key_expiry_days": { + "type": "integer" + }, + "max_pat_expiry_days": { + "type": "integer" + }, + "max_service_key_expiry_days": { + "type": "integer" + }, + "member_disabled": { + "type": "boolean" + }, + "org_role_id": { + "anyOf": [ + { + "type": "string", + "format": "uuid" + }, + { + "type": "null" + } + ] + }, + "org_role_name": { + "anyOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/orgs.OrganizationRole" + } + ] + }, + { + "type": "null" + } + ] + }, + "pat_creation_disabled": { + "type": "boolean" + }, + "permissions": { "type": "array", "items": { "type": "string" } - } - } - }, - "mcp_vendors.McpVendor": { - "type": "object", - "properties": { - "description": { + }, + "public_sharing_disabled": { + "type": "boolean" + }, + "reached_max_workspaces": { + "type": "boolean" + }, + "scim_group_name_separator": { "type": "string" }, - "icon": { + "security_contact": { "type": "string" }, - "name": { + "sso_login_slug": { "type": "string" }, - "status": { - "$ref": "#/components/schemas/mcp_vendors.McpVendorStatus" + "sso_only": { + "type": "boolean" }, - "vendor_id": { + "tier": { "type": "string" + }, + "topic_search_enabled": { + "type": "boolean", + "default": false + }, + "workspace_admin_can_invite_to_org": { + "type": "boolean" } } }, - "mcp_vendors.McpVendorStatus": { + "orgs.OrganizationRole": { "type": "string", "enum": [ - "enabled", - "disabled" + "ORGANIZATION_ADMIN", + "ORGANIZATION_OPERATOR", + "ORGANIZATION_USER", + "ORGANIZATION_VIEWER", + "ORGANIZATION_RESTRICTED", + "CUSTOM" ], "x-enum-varnames": [ - "McpVendorStatusEnabled", - "McpVendorStatusDisabled" + "OrganizationRoleAdmin", + "OrganizationRoleOperator", + "OrganizationRoleUser", + "OrganizationRoleViewer", + "OrganizationRoleRestricted", + "OrganizationRoleCustom" ] }, - "mcp_vendors.VendorTool": { + "orgs.SCIMGroup": { "type": "object", "properties": { - "description": { + "created_at": { "type": "string" }, "name": { @@ -79167,583 +85742,1099 @@ } } }, - "mcptools.ErrorResponse": { + "orgs.WorkspaceMembership": { "type": "object", "properties": { - "code": { + "role_id": { "type": "string" }, - "detail": { + "role_name": { "type": "string" }, - "status": { - "type": "integer" - }, - "type": { + "workspace_id": { "type": "string" - } - } - }, - "mcptools.ListToolsResponse": { - "type": "object", - "properties": { - "cached": { - "type": "boolean" }, - "fetched_at": { + "workspace_name": { "type": "string" - }, - "tools": { - "type": "array", - "items": { - "$ref": "#/components/schemas/mcptools.Tool" - } } } }, - "mcptools.MCPErrorCode": { + "productfeedback.Category": { "type": "string", "enum": [ - "auth_failed", - "unreachable", - "invalid_response" + "BUG", + "FEATURE_REQUEST", + "USABILITY", + "DOCUMENTATION", + "OTHER" ], "x-enum-varnames": [ - "MCPErrorCodeAuthFailed", - "MCPErrorCodeUnreachable", - "MCPErrorCodeInvalidResponse" + "CategoryBug", + "CategoryFeatureRequest", + "CategoryUsability", + "CategoryDocumentation", + "CategoryOther" ] }, - "mcptools.Tool": { + "productfeedback.ClientContext": { "type": "object", "properties": { - "annotations": { - "type": "object", - "additionalProperties": {} - }, - "description": { - "type": "string" + "architecture": { + "type": "string", + "maxLength": 100 }, - "inputSchema": { - "type": "object", - "additionalProperties": {} + "os": { + "type": "string", + "maxLength": 100 }, - "name": { - "type": "string" + "version": { + "type": "string", + "maxLength": 100 } } }, - "models.ErrorResponse": { + "productfeedback.CreateRequest": { "type": "object", + "required": [ + "category", + "message", + "source" + ], "properties": { - "code": { - "type": "string" + "category": { + "enum": [ + "BUG", + "FEATURE_REQUEST", + "USABILITY", + "DOCUMENTATION", + "OTHER" + ], + "allOf": [ + { + "$ref": "#/components/schemas/productfeedback.Category" + } + ] }, - "detail": { - "type": "string" + "client": { + "$ref": "#/components/schemas/productfeedback.ClientContext" }, - "status": { - "type": "integer" + "message": { + "type": "string", + "maxLength": 4000, + "minLength": 1 }, - "type": { - "type": "string" + "source": { + "enum": [ + "LANGSMITH_CLI" + ], + "allOf": [ + { + "$ref": "#/components/schemas/productfeedback.Source" + } + ] } } }, - "models.FleetModel": { + "productfeedback.ProductFeedback": { "type": "object", + "required": [ + "category", + "created_at", + "id", + "message", + "source" + ], "properties": { - "display_name": { - "type": "string" + "category": { + "$ref": "#/components/schemas/productfeedback.Category" }, - "id": { - "type": "string" + "client": { + "$ref": "#/components/schemas/productfeedback.ClientContext" }, - "is_default": { - "type": "boolean" + "created_at": { + "type": "string", + "format": "date-time" }, - "playground_settings_id": { - "type": "string" + "id": { + "type": "string", + "format": "uuid" }, - "provider": { + "message": { "type": "string" }, - "required_secrets": { - "type": "array", - "items": { - "type": "string" - } - }, "source": { - "type": "string" + "$ref": "#/components/schemas/productfeedback.Source" } } }, - "models.ListModelsResponse": { + "productfeedback.Source": { + "type": "string", + "enum": [ + "LANGSMITH_CLI" + ], + "x-enum-varnames": [ + "SourceLangSmithCLI" + ] + }, + "query.PublicSharedTraceRunsRequestBody": { "type": "object", "properties": { - "items": { + "selects": { + "description": "`selects` lists which public run properties to include on each returned run.", "type": "array", "items": { - "$ref": "#/components/schemas/models.FleetModel" - } + "type": "string", + "enum": [ + "ID", + "NAME", + "RUN_TYPE", + "STATUS", + "START_TIME", + "END_TIME", + "LATENCY_SECONDS", + "FIRST_TOKEN_TIME", + "ERROR", + "ERROR_PREVIEW", + "EXTRA", + "METADATA", + "INPUTS_PREVIEW", + "OUTPUTS_PREVIEW", + "PARENT_RUN_ID", + "PARENT_RUN_IDS", + "PROJECT_ID", + "TRACE_ID", + "THREAD_ID", + "DOTTED_ORDER", + "IS_ROOT", + "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", + "THREAD_EVALUATION_TIME", + "FEEDBACK_STATS" + ] + }, + "example": [ + "ID", + "NAME", + "PROJECT_ID", + "START_TIME", + "RUN_TYPE", + "STATUS", + "INPUTS_PREVIEW", + "OUTPUTS_PREVIEW", + "METADATA" + ] } } }, - "nps.SubmitResponseRequest": { + "query.QueryRunsRequestBody": { "type": "object", "properties": { - "comment": { - "type": "string" + "ai_search": { + "description": "`ai_search` is a plain-language criterion evaluated against the messages from the agent trajectory scoped to the run.\nAND-ed with the ordinary filters. Requires semantic filtering enabled for the deployment.\nMust contain nonempty text of at most 2000 UTF-8 bytes. Not supported on public dataset queries.", + "type": "string", + "maxLength": 2000, + "minLength": 1, + "example": "The customer was charged twice" }, - "score": { - "type": "integer" - } - } - }, - "oauth.AuthorizationServerMetadata": { - "type": "object", - "properties": { - "authorization_endpoint": { - "type": "string" + "cursor": { + "description": "`cursor` is the opaque string from a previous response's `next_cursor`. Treat it as opaque and pass it back unmodified.", + "type": "string", + "example": "eyJ2IjoxLCJhIjoicnVucy5xdWVyeSIsImsiOiJwYXNzIiwiYiI6InNkYiIsInQiOiJsdChjdXJzb3IsICcyMDI1LTEyLTEyIDE5OjAzOjI4LjQ4MTI1NTAxOWIxM2YyJykifQ" }, - "code_challenge_methods_supported": { - "type": "array", - "items": { - "type": "string" - } + "filter": { + "description": "`filter` narrows results to runs matching this LangSmith filter expression, evaluated against each individual run.\nFor example: and(eq(run_type, \"llm\"), gt(latency, 5)) or eq(status, \"error\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string", + "example": "and(eq(run_type, \"llm\"), gt(latency, 5))" }, - "device_authorization_endpoint": { - "type": "string" + "has_error": { + "description": "`has_error` filters to runs that errored (true) or completed without error (false).", + "type": "boolean", + "example": false }, - "grant_types_supported": { + "ids": { + "description": "`ids` optionally limits the request to these run UUIDs.", "type": "array", "items": { - "type": "string" - } + "type": "string", + "format": "uuid" + }, + "example": [ + "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327", + "f47ac10b-58cc-4372-a567-0e02b2c3d479" + ] }, - "issuer": { - "type": "string" + "is_root": { + "description": "`is_root` returns only root runs (true) or only non-root runs (false).", + "type": "boolean", + "example": true }, - "jwks_uri": { - "type": "string" + "max_feedback_modified_at": { + "description": "`max_feedback_modified_at` is the exclusive upper bound (RFC3339) on feedback `modified_at`, applied to the feedback conditions in `filter`, `trace_filter`, or `tree_filter` (for example eq(feedback_key, \"correctness\")).\nRequires at least one feedback condition. Runs must still fall within the `start_time` window.", + "type": "string", + "format": "date-time", + "example": "2024-12-31T23:59:59Z" }, - "protected_resources_supported": { - "type": "array", - "items": { - "type": "string" - } + "max_start_time": { + "description": "`max_start_time` is the upper bound for run `start_time` (RFC3339). Defaults to now.", + "type": "string", + "format": "date-time", + "example": "2024-12-31T23:59:59Z" }, - "registration_endpoint": { - "type": "string" + "min_feedback_modified_at": { + "description": "`min_feedback_modified_at` is the inclusive lower bound (RFC3339) on feedback `modified_at`, applied to the feedback conditions in `filter`, `trace_filter`, or `tree_filter` (for example eq(feedback_key, \"correctness\")).\nRequires at least one feedback condition. Runs must still fall within the `start_time` window.", + "type": "string", + "format": "date-time", + "example": "2024-01-01T00:00:00Z" }, - "resource_parameter_supported": { - "type": "boolean" + "min_start_time": { + "description": "`min_start_time` is the lower bound for run `start_time` (RFC3339). Defaults to 1 day ago.", + "type": "string", + "format": "date-time", + "example": "2024-01-01T00:00:00Z" }, - "response_types_supported": { + "page_size": { + "description": "`page_size` is the maximum number of runs to return in this response. Defaults to 100 when omitted; must be between 1 and 1000 inclusive when set.", + "type": "integer", + "default": 100, + "maximum": 1000, + "minimum": 1, + "example": 100 + }, + "project_ids": { + "description": "`project_ids` lists tracing project UUIDs to query.\nRequired unless `reference_dataset_id` is set. Mutually exclusive with `reference_dataset_id` — set exactly one of them.", "type": "array", "items": { - "type": "string" - } + "type": "string", + "format": "uuid" + }, + "example": [ + "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327", + "0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328" + ] }, - "revocation_endpoint": { - "type": "string" + "reference_dataset_id": { + "description": "`reference_dataset_id` resolves session IDs server-side from the dataset.\nRequired unless `project_ids` is set. Mutually exclusive with `project_ids` — set exactly one of them.\nWhen provided and `min_start_time` is omitted, the server derives it from the earliest session creation date.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" }, - "scopes_supported": { + "reference_examples": { + "description": "`reference_examples` optionally limits to runs linked to these dataset example UUIDs.", "type": "array", "items": { - "type": "string" - } + "type": "string", + "format": "uuid" + }, + "example": [ + "b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e", + "c3d4e5f6-a7b8-4c5d-0e1f-2a3b4c5d6e7f" + ] }, - "token_endpoint": { - "type": "string" + "run_type": { + "description": "`run_type`, when set, restricts results to runs whose `run_type` equals this value.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunType" + } + ], + "example": "LLM" }, - "token_endpoint_auth_methods_supported": { + "selects": { + "description": "`selects` lists which properties to include on each returned run. If omitted, only `id` is returned. Properties not listed are omitted from each run object.", "type": "array", "items": { - "type": "string" - } - } - } - }, - "oauth.ClientPublicMetadata": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_name": { - "type": "string" - }, - "client_uri": { - "type": "string" + "$ref": "#/components/schemas/query.RunSelectField" + }, + "example": [ + "ID", + "NAME", + "PROJECT_ID", + "START_TIME", + "RUN_TYPE", + "STATUS" + ] }, - "logo_uri": { - "type": "string" + "trace_filter": { + "description": "`trace_filter` narrows results to runs whose root trace matches this LangSmith filter expression.\nUse this to filter by properties of the trace's root run — for example eq(status, \"success\") to include only traces that completed without error.\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string", + "example": "eq(status, \"success\")" }, - "policy_uri": { - "type": "string" + "trace_id": { + "description": "`trace_id` optionally limits results to runs belonging to this trace UUID.", + "type": "string", + "format": "uuid", + "example": "f47ac10b-58cc-4372-a567-0e02b2c3d479" }, - "tos_uri": { - "type": "string" + "tree_filter": { + "description": "`tree_filter` narrows results to runs that belong to a trace containing at least one run matching this LangSmith filter expression anywhere in the run tree (not just the root).\nUse this to find runs inside traces that involved a specific tool, tag, or model — for example has(tags, \"production\") or eq(name, \"my_tool\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string", + "example": "has(tags, \"production\")" } } }, - "oauth.ClientRegistrationRequest": { + "query.QueryRunsResponseBody": { "type": "object", "properties": { - "client_name": { - "type": "string" - }, - "client_uri": { - "type": "string" - }, - "grant_types": { - "type": "array", - "items": { - "type": "string" - } - }, - "logo_uri": { - "type": "string" - }, - "policy_uri": { - "type": "string" - }, - "redirect_uris": { + "items": { + "description": "`items` is the page of runs, sorted by `start_time` descending.", "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/query.RunResponse" } }, - "response_types": { + "next_cursor": { + "description": "`next_cursor` is the opaque cursor to pass as `cursor` on the next request. Null on the final page.", + "type": "string", + "example": "eyJ2IjoxLCJhIjoicnVucy5xdWVyeSIsImsiOiJwYXNzIiwiYiI6InNkYiIsInQiOiJsdChjdXJzb3IsICcyMDI1LTEyLTEyIDE5OjAzOjI4LjQ4MTI1NTAxOWIxM2YyJykifQ" + } + } + }, + "query.QueryTraceResponseBody": { + "type": "object", + "properties": { + "items": { + "description": "`items` lists runs in the trace for the requested time window, in `start_time` order.", "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/query.RunResponse" } - }, - "scope": { - "type": "string" - }, - "token_endpoint_auth_method": { - "type": "string" - }, - "tos_uri": { - "type": "string" } } }, - "oauth.ClientRegistrationResponse": { + "query.QueryTracesRequestBody": { "type": "object", "properties": { - "client_id": { + "ai_search": { + "description": "`ai_search` is a plain-language criterion evaluated against the messages from the agent trajectory scoped to the trace.\nAND-ed with the ordinary filters. Requires semantic filtering enabled for the deployment.\nMust contain nonempty text of at most 2000 UTF-8 bytes.", + "type": "string", + "maxLength": 2000, + "minLength": 1, + "example": "A run that contains a billing dispute" + }, + "cursor": { + "description": "`cursor` is the opaque string returned in a previous response's `next_cursor`.", "type": "string" }, - "client_id_issued_at": { - "type": "integer" + "max_start_time": { + "description": "`max_start_time` is the exclusive upper bound for the root-run start time scan (RFC3339). Defaults to the request time when omitted.", + "type": "string", + "format": "date-time", + "example": "2024-12-31T23:59:59Z" }, - "client_name": { - "type": "string" + "min_start_time": { + "description": "`min_start_time` is the inclusive lower bound for the root-run start time scan (RFC3339). Defaults to 24 hours before the request when omitted.", + "type": "string", + "format": "date-time", + "example": "2024-01-01T00:00:00Z" }, - "client_uri": { - "type": "string" + "page_size": { + "description": "`page_size` is the maximum number of traces to return per page. Defaults to 20; must be between 1 and 100 when set.", + "type": "integer", + "default": 20, + "maximum": 100, + "minimum": 1, + "example": 20 }, - "grant_types": { + "project_id": { + "description": "`project_id` is the UUID of the tracing project that owns the traces. Required.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" + }, + "selects": { + "description": "`selects` lists which properties to include on each returned trace. Properties listed here are routed to the appropriate sub-object on each item: `total_tokens`, `total_cost`, and `first_token_time` appear under `trace_aggregates`; everything else appears under `root_run`. If omitted, only `id` is returned on `root_run`.", "type": "array", "items": { - "type": "string" - } - }, - "logo_uri": { - "type": "string" + "$ref": "#/components/schemas/query.RunSelectField" + }, + "example": [ + "ID", + "NAME", + "START_TIME", + "STATUS", + "TOTAL_TOKENS", + "TOTAL_COST", + "FIRST_TOKEN_TIME" + ] }, - "policy_uri": { - "type": "string" + "trace_filter": { + "description": "`trace_filter` narrows results to traces whose root run matches this LangSmith filter expression. This filter targets root runs only — `is_root = true` is implied.\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string", + "example": "eq(status, \"error\")" }, - "redirect_uris": { + "trace_ids": { + "description": "`trace_ids` is an optional fast-path restriction to a known set of trace UUIDs. Equivalent in result to including each UUID in a `trace_filter`, but more efficient at scale.", "type": "array", "items": { - "type": "string" + "type": "string", + "format": "uuid" } }, - "response_types": { + "tree_filter": { + "description": "`tree_filter` narrows results to traces containing at least one run anywhere in the run tree (root or descendant) that matches this LangSmith filter expression.", + "type": "string", + "example": "has(tags, \"production\")" + } + } + }, + "query.QueryTracesResponseBody": { + "type": "object", + "properties": { + "items": { + "description": "`items` is the page of traces.", "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/query.Trace" } }, - "token_endpoint_auth_method": { - "type": "string" - }, - "tos_uri": { + "next_cursor": { + "description": "`next_cursor` is the opaque cursor for the next page. Null on the final page.", "type": "string" } } }, - "oauth.DeviceCodeResponse": { + "query.RunAttachmentURLs": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "query.RunCompletionCostDetails": { "type": "object", "properties": { - "device_code": { - "type": "string" - }, - "expires_in": { - "type": "integer" - }, - "interval": { - "type": "integer" - }, - "user_code": { - "type": "string" - }, - "verification_uri": { - "type": "string" + "raw": { + "description": "`raw` maps each category name to its estimated USD cost.", + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } } } }, - "oauth.TokenErrorResponse": { + "query.RunCompletionTokenDetails": { "type": "object", "properties": { - "error": { - "type": "string" + "raw": { + "description": "`raw` maps each category name to its completion-token count.", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + } + } + }, + "query.RunEvent": { + "type": "object", + "properties": { + "kwargs": { + "description": "`kwargs` is the event payload — an opaque JSON object whose shape depends on `name` and on the emitting SDK. For example LangChain emits `{\"token\": {...}}` for `new_token` events, tool-call start/end details for tool events, and arbitrary user-defined payloads for custom events. Clients should treat `kwargs` as untyped JSON: do not assume specific keys exist for a given `name`, and tolerate additional unknown keys appearing over time.", + "type": "object" }, - "error_description": { - "type": "string" + "name": { + "description": "`name` is the event kind. Common values emitted by the LangChain/LangSmith tracer SDKs include `\"start\"`, `\"end\"`, and `\"new_token\"`, but applications may emit arbitrary strings for their own instrumentation.", + "type": "string", + "example": "new_token" + }, + "time": { + "description": "`time` is when the event occurred (RFC3339 date-time with millisecond precision).", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:30:00.312Z" } } }, - "oauth.TokenResponse": { + "query.RunFeedbackStat": { "type": "object", "properties": { - "access_token": { - "type": "string" + "avg": { + "description": "`avg` is the arithmetic mean of numeric feedback scores for this key on the run, or `null` when no numeric score has been recorded (for example purely categorical feedback).", + "type": "number", + "example": 0.87 }, - "expires_in": { - "type": "integer" + "comments": { + "description": "`comments` is a sample of human-readable comments attached to feedback points for this key, in no particular order. May be empty; is not exhaustive when many comments exist.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "good answer", + "needs citation" + ] }, - "refresh_token": { - "type": "string" + "contains_thread_feedback": { + "description": "`contains_thread_feedback` is true when at least one feedback point for this key was submitted at the thread level (rather than at an individual run). Always false on responses that already describe a single run in isolation.", + "type": "boolean", + "example": false }, - "token_type": { - "type": "string" + "errors": { + "description": "`errors` is the number of feedback points recorded as errors rather than successful scores (for example an automated evaluator that raised an exception). Defaults to 0 when no errors occurred.", + "type": "integer", + "default": 0, + "example": 0 }, - "workspace_id": { - "type": "string" + "max": { + "description": "`max` is the largest numeric feedback score recorded for this key on the run, or `null` when no numeric score has been recorded.", + "type": "number", + "example": 0.95 + }, + "min": { + "description": "`min` is the smallest numeric feedback score recorded for this key on the run, or `null` when no numeric score has been recorded.", + "type": "number", + "example": 0.8 + }, + "n": { + "description": "`n` is the number of feedback points recorded for this key on the run. For numeric feedback this is the sample size behind `avg`, `min`, `max`, and `stdev`; for categorical feedback it is the sum of the `values` counts.", + "type": "integer", + "example": 42 + }, + "sources": { + "description": "`sources` is a sample of feedback sources for this key. Each entry is either a plain string identifier (for example `\"api\"`, `\"app\"`, `\"model\"`) or a JSON object describing a synthetic source (for example `{\"type\": \"__ls_composite_feedback\"}` for a computed aggregate). Clients must tolerate both shapes.", + "type": "array", + "items": {} + }, + "stdev": { + "description": "`stdev` is the sample standard deviation of numeric feedback scores for this key on the run, or `null` when it cannot be computed (for example fewer than two numeric scores, or purely categorical feedback).", + "type": "number", + "example": 0.05 + }, + "values": { + "description": "`values` is the distribution of categorical feedback labels for this key, mapping each label to its occurrence count. Empty (`{}`) for purely numeric feedback.", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } } } }, - "orgs.LinkedLoginMethod": { + "query.RunFeedbackStats": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/query.RunFeedbackStat" + } + }, + "query.RunPromptCostDetails": { "type": "object", "properties": { - "provider": { - "type": "string" - }, - "provisioning": { - "description": "provisioning_method", - "type": "string" + "raw": { + "description": "`raw` maps each category name to its estimated USD cost.", + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } } } }, - "orgs.OrgMemberEnriched": { + "query.RunPromptTokenDetails": { "type": "object", "properties": { - "avatar_url": { - "type": "string" - }, - "created_at": { - "type": "string" + "raw": { + "description": "`raw` maps each category name to its prompt-token count.", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + } + } + }, + "query.RunResponse": { + "type": "object", + "properties": { + "app_path": { + "description": "`app_path` identifies the application code location that produced this run, if recorded.", + "type": "string", + "example": "/app/chains/chat.py:invoke" }, - "display_name": { - "description": "auth-resolved display name", - "type": "string" + "attachments": { + "description": "`attachments` maps each attachment file name to a pre-signed HTTPS download URL.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunAttachmentURLs" + } + ], + "example": { + "{\"output.png\"": "\"https://storage.example.com/bucket/key?X-Amz-Signature=abc\"}" + } }, - "email": { - "type": "string" + "completion_cost": { + "description": "`completion_cost` is estimated USD cost for the completion.", + "type": "number", + "example": 0.0003 }, - "id": { - "description": "identity_id or pending_identity_id", - "type": "string" + "completion_cost_details": { + "description": "`completion_cost_details` is the per-category USD breakdown of `completion_cost`. Categories mirror `completion_token_details`. Returned only when the `COMPLETION_COST_DETAILS` field is requested.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunCompletionCostDetails" + } + ] }, - "is_disabled": { - "description": "user disabled", - "type": "boolean" + "completion_token_details": { + "description": "`completion_token_details` is the per-category breakdown of `completion_tokens`. Category names are model-specific (for example `reasoning`, `audio`). Returned only when the `COMPLETION_TOKEN_DETAILS` field is requested.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunCompletionTokenDetails" + } + ] }, - "is_pending": { - "description": "true for pending invitations", - "type": "boolean" + "completion_tokens": { + "description": "`completion_tokens` is the completion-side token count.", + "type": "integer", + "example": 150 }, - "linked_login_methods": { - "type": "array", - "items": { - "$ref": "#/components/schemas/orgs.LinkedLoginMethod" - } + "dotted_order": { + "description": "`dotted_order` is the hierarchical ordering key for trace trees.", + "type": "string", + "example": "20240115T103000000000Z018e4c7ea9fb7ef0a5b66ea3a82e9327." }, - "ls_user_id": { - "description": "nil for pending members", - "type": "string" + "end_time": { + "description": "`end_time` is when the run ended (RFC3339 date-time). JSON null if the run has not finished yet.", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:30:01.500Z" }, - "role_id": { - "description": "org role", - "type": "string" + "error": { + "description": "`error` is the error message when `status` indicates failure.", + "type": "string", + "example": "context deadline exceeded" }, - "role_name": { - "description": "org role name", + "error_preview": { + "description": "`error_preview` is a truncated plain-text error snippet.", "type": "string" }, - "scim_groups": { + "events": { + "description": "`events` is the ordered list of run events (for example streaming tokens).", "type": "array", "items": { - "$ref": "#/components/schemas/orgs.SCIMGroup" + "$ref": "#/components/schemas/query.RunEvent" } }, - "workspace_memberships": { - "type": "array", - "items": { - "$ref": "#/components/schemas/orgs.WorkspaceMembership" - } - } - } - }, - "orgs.OrganizationInfo": { - "type": "object", - "properties": { - "can_export_usage_backfill": { - "type": "boolean" + "extra": { + "description": "`extra` is additional runtime JSON attached to the run.", + "type": "object" }, - "config": { - "$ref": "#/components/schemas/authn.OrganizationConfig" + "feedback_stats": { + "description": "`feedback_stats` aggregates feedback scores keyed by feedback key.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunFeedbackStats" + } + ] }, - "default_sso_provision": { - "type": "boolean" + "first_token_time": { + "description": "`first_token_time` is when the first output token was produced (RFC3339 date-time), when recorded for streamed runs.", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:30:00.312Z" }, - "disabled": { - "type": "boolean" + "id": { + "description": "`id` is this run's UUID.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" }, - "display_name": { + "inputs": { + "description": "`inputs` is the run input payload (arbitrary JSON object).", + "type": "object" + }, + "inputs_preview": { + "description": "`inputs_preview` is a truncated plain-text preview of inputs.", "type": "string" }, - "engine_enabled": { - "type": "boolean" + "is_in_dataset": { + "description": "`is_in_dataset` is true when this run is linked to a dataset example.", + "type": "boolean", + "example": true }, - "engine_lcu_spend_limit_monthly": { - "description": "EngineLCUSpendLimitMonthly is the org admin (Layer 3) monthly Engine LCU spend\nlimit; null means the admin set no limit. The effective enforced limit is the\nminimum of this and the finance/plan limits carried on Config.", - "type": "string" + "is_root": { + "description": "`is_root` is true when this run has no parent (it is the trace root).", + "type": "boolean", + "example": true }, - "engine_show_trial_modal": { - "description": "EngineShowTrialModal is true when Engine is enabled, no user has acknowledged\nthe trial end notice, and the org has not opted out.", - "type": "boolean" + "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" }, - "engine_trial_modal_seen_at": { - "description": "EngineTrialModalSeenAt is the first time any admin in the org rendered\nthe trial modal. The frontend reads it to skip the mark_seen POST when\nalready set, and the backend's read-time cutoff uses it to treat the\norg as \"notified\" (Engine stays on past June 1).", - "type": "string" + "latency_seconds": { + "description": "`latency_seconds` is wall-clock duration from start to end in seconds.", + "type": "number", + "example": 1.523 }, - "id": { - "type": "string" + "ls_user_id": { + "description": "`ls_user_id` identifies the LangSmith user whose credential traced the run. It is absent for runs traced with a service-account API key, which has no associated user.", + "type": "string", + "format": "uuid", + "example": "f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c" }, - "invites_enabled": { - "type": "boolean" + "manifest": { + "description": "`manifest` is the serialized configuration of the traced component (for example the model parameters, prompt template, or pipeline definition), when recorded.", + "type": "object" }, - "ip_allowlist": { - "type": "array", - "items": { - "type": "string" - } + "metadata": { + "description": "`metadata` is arbitrary user-defined JSON metadata.", + "type": "object" }, - "ip_allowlist_enabled": { - "type": "boolean" + "name": { + "description": "`name` is a human-readable label for the run (for example the model name, function name, or step name chosen when the run was traced).", + "type": "string", + "example": "ChatOpenAI" }, - "is_personal": { - "type": "boolean" + "outputs": { + "description": "`outputs` is the run output payload (arbitrary JSON object).", + "type": "object" }, - "jit_provisioning_enabled": { - "type": "boolean" + "outputs_preview": { + "description": "`outputs_preview` is a truncated plain-text preview of outputs.", + "type": "string" }, - "llm_auth_proxy_allowed_urls": { + "parent_run_ids": { + "description": "`parent_run_ids` lists ancestor run UUIDs from the trace root down to the direct parent.", "type": "array", "items": { - "type": "string" - } + "type": "string", + "format": "uuid" + }, + "example": [ + "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327", + "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d" + ] }, - "llm_auth_proxy_enabled": { - "type": "boolean" + "price_model_id": { + "description": "`price_model_id` identifies the pricing model UUID used for cost estimates, when recorded.", + "type": "string", + "format": "uuid", + "example": "e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b" }, - "llm_auth_proxy_jwt_audience": { - "type": "string" + "project_id": { + "description": "`project_id` is the tracing project UUID this run was logged to.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" }, - "marketplace_payouts_enabled": { - "type": "boolean" + "prompt_cost": { + "description": "`prompt_cost` is estimated USD cost for the prompt.", + "type": "number", + "example": 0.0002 }, - "max_api_key_expiry_days": { - "type": "integer" + "prompt_cost_details": { + "description": "`prompt_cost_details` is the per-category USD breakdown of `prompt_cost`. Categories mirror `prompt_token_details`. Returned only when the `PROMPT_COST_DETAILS` field is requested.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunPromptCostDetails" + } + ] }, - "max_pat_expiry_days": { - "type": "integer" + "prompt_token_details": { + "description": "`prompt_token_details` is the per-category breakdown of `prompt_tokens`. Category names are model-specific (for example `cache_read`, `cache_write`). Returned only when the `PROMPT_TOKEN_DETAILS` field is requested.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunPromptTokenDetails" + } + ] }, - "max_service_key_expiry_days": { - "type": "integer" + "prompt_tokens": { + "description": "`prompt_tokens` is the prompt-side token count.", + "type": "integer", + "example": 200 }, - "member_disabled": { - "type": "boolean" + "query_metadata": { + "description": "`query_metadata` describes this query result, including `sem_filter_score` when a semantic filter is used. Returned automatically by run queries, or null when unavailable.", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] }, - "pat_creation_disabled": { - "type": "boolean" + "reference_dataset_id": { + "description": "`reference_dataset_id` is the dataset UUID for the reference example, if any.", + "type": "string", + "format": "uuid", + "example": "c3d4e5f6-a7b8-4c5d-0e1f-2a3b4c5d6e7f" }, - "permissions": { + "reference_example_id": { + "description": "`reference_example_id` is the dataset example UUID this run was compared against, if any.", + "type": "string", + "format": "uuid", + "example": "b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e" + }, + "run_type": { + "description": "`run_type` identifies what kind of operation this run represents (for example an LLM call, a tool invocation, or a chain step). See the `RunType` enum for allowed values.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunType" + } + ], + "example": "LLM" + }, + "share_url": { + "description": "`share_url` is the fully-qualified URL of this run's public view, rooted at the deployment's LangSmith app origin (for example `https://smith.langchain.com/public/4f7a1b2c-8d9e-4a0b-9c1d-2e3f4a5b6c7d/r`). It is returned only when `SHARE_URL` is included in `selects`, and only when the run has been explicitly shared; the URL remains stable until the run is unshared. Anyone with this URL can view the run anonymously, so treat it as a secret and do not log it.", + "type": "string", + "example": "https://smith.langchain.com/public/4f7a1b2c-8d9e-4a0b-9c1d-2e3f4a5b6c7d/r" + }, + "start_time": { + "description": "`start_time` is when the run started (RFC3339 date-time).", + "type": "string", + "format": "date-time", + "example": "2024-01-15T10:30:00.000Z" + }, + "status": { + "description": "`status` is the completion status of the run.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunStatus" + } + ], + "example": "SUCCESS" + }, + "tags": { + "description": "`tags` lists user-defined tags on this run.", "type": "array", "items": { "type": "string" - } - }, - "public_sharing_disabled": { - "type": "boolean" - }, - "reached_max_workspaces": { - "type": "boolean" + }, + "example": [ + "production", + "gpt-4" + ] }, - "scim_group_name_separator": { - "type": "string" + "thread_evaluation_time": { + "description": "`thread_evaluation_time` is thread-level evaluation timing (RFC3339 date-time), when recorded.", + "type": "string", + "format": "date-time" }, - "security_contact": { - "type": "string" + "thread_id": { + "description": "`thread_id` is the conversation thread UUID this run belongs to, if any.", + "type": "string", + "format": "uuid", + "example": "d4e5f6a7-b8c9-4d5e-1f2a-3b4c5d6e7f8a" }, - "sso_login_slug": { - "type": "string" + "total_cost": { + "description": "`total_cost` is total estimated USD cost (prompt plus completion).", + "type": "number", + "example": 0.000525 }, - "sso_only": { - "type": "boolean" + "total_tokens": { + "description": "`total_tokens` is prompt plus completion tokens.", + "type": "integer", + "example": 350 }, - "tier": { + "trace_id": { + "description": "`trace_id` is the root trace UUID; for a root run it matches `id`.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" + } + } + }, + "query.RunSelectField": { + "type": "string", + "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", + "LS_USER_ID" + ], + "x-enum-varnames": [ + "RunSelectID", + "RunSelectName", + "RunSelectRunType", + "RunSelectStatus", + "RunSelectStartTime", + "RunSelectEndTime", + "RunSelectLatencySeconds", + "RunSelectFirstTokenTime", + "RunSelectError", + "RunSelectErrorPreview", + "RunSelectExtra", + "RunSelectMetadata", + "RunSelectEvents", + "RunSelectInputs", + "RunSelectInputsPreview", + "RunSelectOutputs", + "RunSelectOutputsPreview", + "RunSelectManifest", + "RunSelectParentRunIDs", + "RunSelectProjectID", + "RunSelectTraceID", + "RunSelectThreadID", + "RunSelectDottedOrder", + "RunSelectIsRoot", + "RunSelectReferenceExampleID", + "RunSelectReferenceDatasetID", + "RunSelectTotalTokens", + "RunSelectPromptTokens", + "RunSelectCompletionTokens", + "RunSelectTotalCost", + "RunSelectPromptCost", + "RunSelectCompletionCost", + "RunSelectPromptTokenDetails", + "RunSelectCompletionTokenDetails", + "RunSelectPromptCostDetails", + "RunSelectCompletionCostDetails", + "RunSelectPriceModelID", + "RunSelectTags", + "RunSelectAppPath", + "RunSelectAttachments", + "RunSelectThreadEvaluationTime", + "RunSelectIsInDataset", + "RunSelectLastQueuedAt", + "RunSelectShareURL", + "RunSelectFeedbackStats", + "RunSelectLsUserID" + ] + }, + "query.RunStatus": { + "type": "string", + "enum": [ + "SUCCESS", + "ERROR", + "PENDING" + ], + "x-enum-varnames": [ + "RunStatusSuccess", + "RunStatusError", + "RunStatusPending" + ] + }, + "query.RunType": { + "type": "string", + "enum": [ + "TOOL", + "CHAIN", + "LLM", + "RETRIEVER", + "EMBEDDING", + "PROMPT", + "PARSER" + ], + "x-enum-varnames": [ + "RunTypeTool", + "RunTypeChain", + "RunTypeLLM", + "RunTypeRetriever", + "RunTypeEmbedding", + "RunTypePrompt", + "RunTypeParser" + ] + }, + "query.RunURLResponse": { + "type": "object", + "properties": { + "url": { "type": "string" - }, - "workspace_admin_can_invite_to_org": { - "type": "boolean" } } }, - "orgs.SCIMGroup": { + "query.Trace": { "type": "object", "properties": { - "created_at": { - "type": "string" + "query_metadata": { + "description": "`query_metadata` describes why this trace matched the query, including `sem_filter_score` when a semantic filter is used. Returned automatically, or null when unavailable.", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] }, - "name": { - "type": "string" + "root_run": { + "description": "`root_run` is the trace's root run. Which properties are populated is controlled by `selects` in the request.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunResponse" + } + ] + }, + "trace_aggregates": { + "description": "`trace_aggregates` carries trace-wide aggregate metrics. Omitted when no aggregate field was selected, or `null` (then later filled) on the streaming wire while the aggregate values are still being computed.", + "allOf": [ + { + "$ref": "#/components/schemas/query.TraceAggregates" + } + ] } } }, - "orgs.WorkspaceMembership": { + "query.TraceAggregates": { "type": "object", "properties": { - "role_id": { - "type": "string" - }, - "role_name": { - "type": "string" + "first_token_time": { + "description": "`first_token_time` is when the first output token was produced anywhere in the trace (RFC3339), when recorded.", + "type": "string", + "format": "date-time" }, - "workspace_id": { - "type": "string" + "total_cost": { + "description": "`total_cost` is total estimated USD cost across every run in the trace.", + "type": "number" }, - "workspace_name": { - "type": "string" + "total_tokens": { + "description": "`total_tokens` is prompt plus completion tokens summed across every run in the trace.", + "type": "integer" } } }, @@ -79765,6 +86856,11 @@ "runs.Run": { "type": "object", "properties": { + "address": { + "description": "Beta. Addresses the run to an Agent environment in place of session_id or\nsession_name, as lrn:agents/{id}/environments/{environment}. The environment is\ncase-insensitive. Only workspaces enabled for Agent addressing accept it;\nothers get a 403.", + "type": "string", + "example": "lrn:agents/support-agent/environments/production" + }, "dotted_order": { "type": "string" }, @@ -79852,6 +86948,344 @@ } } }, + "runsanalytics.MetricDefinition": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "denominator": { + "$ref": "#/components/schemas/runsanalytics.ScalarMetricDefinition" + }, + "entity": { + "description": "Entity selects what a type=count metric counts. Only valid when type=count;\ndefaults to MetricEntityRun. entity=feedback requires params.feedback_key\nand counts individual feedback records rather than runs.", + "allOf": [ + { + "$ref": "#/components/schemas/runsanalytics.MetricEntity" + } + ] + }, + "field": { + "$ref": "#/components/schemas/runsanalytics.MetricField" + }, + "numerator": { + "description": "Numerator and Denominator are required when type=ratio.", + "allOf": [ + { + "$ref": "#/components/schemas/runsanalytics.ScalarMetricDefinition" + } + ] + }, + "params": { + "description": "percentile p or histogram bucket_count", + "allOf": [ + { + "$ref": "#/components/schemas/runsanalytics.MetricParams" + } + ] + }, + "type": { + "description": "histogram is reserved and rejected; the tag publishes what is accepted.", + "enum": [ + "count", + "sum", + "avg", + "min", + "max", + "percentile", + "ratio" + ], + "allOf": [ + { + "$ref": "#/components/schemas/runsanalytics.MetricType" + } + ] + } + } + }, + "runsanalytics.MetricEntity": { + "type": "string", + "enum": [ + "run", + "feedback" + ], + "x-enum-varnames": [ + "MetricEntityRun", + "MetricEntityFeedback" + ] + }, + "runsanalytics.MetricField": { + "type": "string", + "enum": [ + "latency_seconds", + "first_token_seconds", + "total_tokens", + "prompt_tokens", + "completion_tokens", + "total_cost", + "prompt_cost", + "completion_cost", + "feedback_score", + "prompt_token_details.cache_creation", + "prompt_token_details.cache_read", + "prompt_token_details.ephemeral_1h_input_tokens", + "prompt_token_details.ephemeral_5m_input_tokens", + "prompt_token_details.audio", + "prompt_token_details.image", + "prompt_token_details.video", + "completion_token_details.reasoning", + "completion_token_details.audio", + "completion_token_details.image", + "completion_token_details.video", + "prompt_cost_details.cache_creation", + "prompt_cost_details.cache_read", + "prompt_cost_details.ephemeral_1h_input_tokens", + "prompt_cost_details.ephemeral_5m_input_tokens", + "prompt_cost_details.audio", + "prompt_cost_details.image", + "prompt_cost_details.video", + "completion_cost_details.reasoning", + "completion_cost_details.audio", + "completion_cost_details.image", + "completion_cost_details.video" + ], + "x-enum-varnames": [ + "MetricFieldLatencySeconds", + "MetricFieldFirstTokenSeconds", + "MetricFieldTotalTokens", + "MetricFieldPromptTokens", + "MetricFieldCompletionTokens", + "MetricFieldTotalCost", + "MetricFieldPromptCost", + "MetricFieldCompletionCost", + "MetricFieldFeedbackScore", + "MetricFieldPromptTokenDetailsCacheCreation", + "MetricFieldPromptTokenDetailsCacheRead", + "MetricFieldPromptTokenDetailsEphemeral1H", + "MetricFieldPromptTokenDetailsEphemeral5M", + "MetricFieldPromptTokenDetailsAudio", + "MetricFieldPromptTokenDetailsImage", + "MetricFieldPromptTokenDetailsVideo", + "MetricFieldCompletionTokenDetailsReasoning", + "MetricFieldCompletionTokenDetailsAudio", + "MetricFieldCompletionTokenDetailsImage", + "MetricFieldCompletionTokenDetailsVideo", + "MetricFieldPromptCostDetailsCacheCreation", + "MetricFieldPromptCostDetailsCacheRead", + "MetricFieldPromptCostDetailsEphemeral1H", + "MetricFieldPromptCostDetailsEphemeral5M", + "MetricFieldPromptCostDetailsAudio", + "MetricFieldPromptCostDetailsImage", + "MetricFieldPromptCostDetailsVideo", + "MetricFieldCompletionCostDetailsReasoning", + "MetricFieldCompletionCostDetailsAudio", + "MetricFieldCompletionCostDetailsImage", + "MetricFieldCompletionCostDetailsVideo" + ] + }, + "runsanalytics.MetricParams": { + "type": "object", + "properties": { + "bucket_count": { + "type": "integer" + }, + "feedback_key": { + "type": "string" + }, + "p": { + "type": "number" + } + } + }, + "runsanalytics.MetricType": { + "type": "string", + "enum": [ + "count", + "sum", + "avg", + "min", + "max", + "percentile", + "ratio", + "histogram" + ], + "x-enum-varnames": [ + "MetricTypeCount", + "MetricTypeSum", + "MetricTypeAvg", + "MetricTypeMin", + "MetricTypeMax", + "MetricTypePercentile", + "MetricTypeRatio", + "MetricTypeHistogram" + ] + }, + "runsanalytics.ScalarMetricDefinition": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "entity": { + "description": "Entity selects what a type=count metric counts. Only valid when type=count;\ndefaults to MetricEntityRun. entity=feedback requires params.feedback_key\nand counts individual feedback records rather than runs.", + "allOf": [ + { + "$ref": "#/components/schemas/runsanalytics.MetricEntity" + } + ] + }, + "field": { + "$ref": "#/components/schemas/runsanalytics.MetricField" + }, + "filter": { + "type": "string" + }, + "params": { + "description": "required when type=percentile", + "allOf": [ + { + "$ref": "#/components/schemas/runsanalytics.MetricParams" + } + ] + }, + "type": { + "description": "An operand is non-composite, so ratio is rejected here too.", + "enum": [ + "count", + "sum", + "avg", + "min", + "max", + "percentile" + ], + "allOf": [ + { + "$ref": "#/components/schemas/runsanalytics.MetricType" + } + ] + } + } + }, + "sandboxapi.AzureBlobMountSpec": { + "type": "object", + "required": [ + "container", + "storage_account" + ], + "properties": { + "container": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "storage_account": { + "description": "StorageAccount is the storage account name: 3 to 24 lowercase letters and digits.", + "type": "string", + "maxLength": 24, + "minLength": 3, + "pattern": "^[a-z0-9]+$" + } + } + }, + "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": [ + "bucket" + ], + "properties": { + "bucket": { + "type": "string" + }, + "prefix": { + "type": "string" + } + } + }, + "sandboxapi.GitMountRefSpec": { + "type": "object", + "required": [ + "name", + "type" + ], + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "branch", + "tag" + ] + } + } + }, + "sandboxapi.GitMountSpec": { + "type": "object", + "required": [ + "remote_url" + ], + "properties": { + "ref": { + "$ref": "#/components/schemas/sandboxapi.GitMountRefSpec" + }, + "refresh_interval_seconds": { + "type": "integer", + "minimum": 1 + }, + "remote_url": { + "type": "string" + } + } + }, + "sandboxapi.GrepMatch": { + "type": "object", + "properties": { + "line": { + "type": "integer" + }, + "path": { + "type": "string" + }, + "text": { + "type": "string" + } + } + }, "sandboxapi.MountCacheSpec": { "type": "object", "properties": { @@ -79865,13 +87299,33 @@ } } }, + "sandboxapi.MountEncryptionSpec": { + "type": "object", + "required": [ + "kms_key" + ], + "properties": { + "kms_key": { + "description": "KMSKey is the key to encrypt uploads with. S3 mounts take a KMS key ARN in the mount's region.", + "type": "string" + } + } + }, "sandboxapi.MountKind": { "type": "string", "enum": [ - "s3" + "s3", + "gcs", + "azure_blob", + "git", + "contexthub" ], "x-enum-varnames": [ - "MountKindS3" + "MountKindS3", + "MountKindGCS", + "MountKindAzureBlob", + "MountKindGit", + "MountKindContextHub" ] }, "sandboxapi.MountSpec": { @@ -79879,13 +87333,27 @@ "required": [ "id", "mount_path", - "s3", "type" ], "properties": { + "azure_blob": { + "$ref": "#/components/schemas/sandboxapi.AzureBlobMountSpec" + }, "cache": { "$ref": "#/components/schemas/sandboxapi.MountCacheSpec" }, + "contexthub": { + "$ref": "#/components/schemas/sandboxapi.ContextHubMountSpec" + }, + "encryption": { + "$ref": "#/components/schemas/sandboxapi.MountEncryptionSpec" + }, + "gcs": { + "$ref": "#/components/schemas/sandboxapi.GCSMountSpec" + }, + "git": { + "$ref": "#/components/schemas/sandboxapi.GitMountSpec" + }, "id": { "type": "string", "maxLength": 64 @@ -79901,7 +87369,11 @@ }, "type": { "enum": [ - "s3" + "s3", + "gcs", + "azure_blob", + "git", + "contexthub" ], "allOf": [ { @@ -79909,13 +87381,56 @@ } ] } + }, + "discriminator": { + "mapping": { + "s3": "#/components/schemas/sandboxapi.S3BucketMountSpec", + "gcs": "#/components/schemas/sandboxapi.GCSBucketMountSpec", + "git": "#/components/schemas/sandboxapi.GitRepoMountSpec", + "contexthub": "#/components/schemas/sandboxapi.ContextHubRepoMountSpec", + "azure_blob": "#/components/schemas/sandboxapi.AzureBlobContainerMountSpec" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/sandboxapi.S3BucketMountSpec" + }, + { + "$ref": "#/components/schemas/sandboxapi.GCSBucketMountSpec" + }, + { + "$ref": "#/components/schemas/sandboxapi.GitRepoMountSpec" + }, + { + "$ref": "#/components/schemas/sandboxapi.ContextHubRepoMountSpec" + }, + { + "$ref": "#/components/schemas/sandboxapi.AzureBlobContainerMountSpec" + } + ] + }, + "sandboxapi.RunConfig": { + "type": "object", + "properties": { + "env_vars": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "user": { + "type": "string" + }, + "work_dir": { + "type": "string" + } } }, "sandboxapi.S3MountSpec": { "type": "object", "required": [ "bucket", - "endpoint_url", "region" ], "properties": { @@ -79953,6 +87468,63 @@ } } }, + "sandboxes.AccessDelegation": { + "type": "object", + "required": [ + "mode" + ], + "properties": { + "mode": { + "$ref": "#/components/schemas/auth.SandboxDelegationMode" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "sandboxes.AttachBrowserPayload": { + "type": "object", + "properties": { + "controller": { + "description": "Controller is who drives a window opened with no sandbox: \"user\"\n(default) for a person in the live view, or \"agent\" for a client that\ndrives it over api_cdp_url. A sandbox's window always starts with\n\"agent\".", + "type": "string", + "enum": [ + "agent", + "user" + ] + }, + "height": { + "type": "integer", + "maximum": 2400, + "minimum": 300 + }, + "name": { + "description": "Name labels the window in the live view; defaults to the sandbox name.", + "type": "string" + }, + "sandbox": { + "description": "Sandbox is the name or ID of the sandbox to attach. Leave it out to open a\nwindow for the person calling, to use from the live view.", + "type": "string" + }, + "share_localhost": { + "description": "ShareLocalhost shares the sandbox's localhost with the browser, so pages\ncan open the servers it runs, such as dev servers, at the response's\nlocalhost_alias. It reaches every port of the sandbox, including servers\nbound only to its localhost. Off by default. Not available for a window\nopened with no sandbox, or when the sandbox is itself a browser.", + "type": "boolean" + }, + "unrestricted": { + "description": "Unrestricted gives the window's CDP clients (its sandbox, or anyone using\nits api_cdp_url) the whole browser, with nothing filtered: every window\nand tab including people's, every site's cookies, and commands that close\nor crash the browser. Taking over its window does not pause them.", + "type": "boolean" + }, + "width": { + "description": "Width and Height size the window's page in CSS pixels; set both or\nneither. Without them the window opens at 1280x800.", + "type": "integer", + "maximum": 3840, + "minimum": 400 + } + } + }, "sandboxes.BatchDeleteRequest": { "type": "object", "properties": { @@ -79992,6 +87564,139 @@ } } }, + "sandboxes.BrowserAttachment": { + "type": "object", + "properties": { + "act_url": { + "type": "string" + }, + "api_cdp_url": { + "description": "APICDPURL is the same Chrome DevTools endpoint through the LangSmith API,\nfor clients outside any sandbox. It takes any API credential: headers as\nfor any API call (X-Api-Key, or Authorization: Bearer with an OAuth\naccess token, plus X-Tenant-Id where needed), or, for clients that take\nonly a URL, api_key, token and tenant_id query parameters.", + "type": "string" + }, + "cdp_url": { + "description": "CDPURL is the Chrome DevTools endpoint the attached sandbox connects to,\nfor example with Playwright's connect_over_cdp. It works only from inside\nthat sandbox.", + "type": "string" + }, + "clients": { + "description": "Clients are the sandboxes currently connected to this window, with \"api\"\nfor each client connected through api_cdp_url. An unrestricted window's\nconnections are not listed.", + "type": "array", + "items": { + "type": "string" + } + }, + "controller": { + "description": "Controller is \"agent\" while the attached sandbox drives the window and\n\"user\" while a person has taken it over.", + "type": "string", + "enum": [ + "agent", + "user" + ] + }, + "created_at": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "links_expire_at": { + "type": "string", + "format": "date-time" + }, + "localhost_alias": { + "description": "LocalhostAlias is the sandbox's localhost as the browser sees it: open\nhttp://: in a window to reach a server listening\non that port in the sandbox, whether bound to localhost or to all\ninterfaces (any port but 80 and 443). While this is the only sandbox\nsharing its localhost, http://localhost: works too. Pages on other\nsites can navigate to a plain-HTTP server there but cannot fetch from it.\nSet only for windows attached with share_localhost.", + "type": "string" + }, + "name": { + "type": "string" + }, + "reason": { + "description": "Reason is why the agent asked a person to take over, when it did.", + "type": "string" + }, + "sandbox": { + "description": "Sandbox is the attached sandbox; empty for a window a person opened.", + "type": "string" + }, + "tabs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.BrowserTab" + } + }, + "unrestricted": { + "description": "Unrestricted windows give their sandbox the whole browser over CDP, with\nnothing filtered: every window and tab, every site's cookies, and\ncommands that close or crash the browser. Taking over such a window does\nnot pause its sandbox, and the LSBrowserControl domain is not available.", + "type": "boolean" + }, + "view_url": { + "description": "ViewURL and ActURL open the window on the sandbox service domain with no\nLangSmith login, for an agent to send to a person: ViewURL to watch it,\nActURL also to use it while its controller is \"user\". Anyone holding a\nlink can open the window until LinksExpireAt. Each response mints new\nones; they are returned only to those who may use the browser.", + "type": "string" + }, + "width": { + "description": "Width and Height are the window's page size in CSS pixels, when it was\ngiven one; a window without one keeps Chrome's default of 1280x800.", + "type": "integer" + } + } + }, + "sandboxes.BrowserResponse": { + "type": "object", + "properties": { + "attachments": { + "description": "Attachments are listed only while the browser is running.", + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.BrowserAttachment" + } + }, + "hidpi": { + "description": "HiDPI reports whether pages render at twice the resolution. It is\nreported only while the browser is running.", + "type": "boolean" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "sandboxes.BrowserTab": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "sandboxes.BrowserWindowLinks": { + "type": "object", + "properties": { + "act_url": { + "description": "ActURL also lets the person take control of the window, use it, and\nhand it back.", + "type": "string" + }, + "expires_at": { + "type": "string", + "format": "date-time" + }, + "view_url": { + "description": "ViewURL shows the window and takes no input.", + "type": "string" + } + } + }, "sandboxes.Callback": { "type": "object", "required": [ @@ -80020,35 +87725,135 @@ "type": "integer", "maximum": 3600, "minimum": 60 - }, - "url": { - "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "sandboxes.CaptureSnapshotPayload": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "checkpoint": { + "description": "if omitted, creates a fresh checkpoint from the running VM", + "type": "string" + }, + "description": { + "description": "Description says what this snapshot's image can do, so a caller can hand it to an agent as a capability summary. At most 1024 characters.", + "type": "string", + "maxLength": 1024 + }, + "docker_image": { + "description": "sandbox-local Docker image to export", + "type": "string" + }, + "fs_capacity_bytes": { + "description": "required for Docker image export unless the sandbox has a capacity", + "type": "integer" + }, + "include_memory": { + "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" + }, + "run_config": { + "description": "RunConfig overrides the runtime configuration the snapshot carries: for a\ndocker_image export, the image's USER, WORKDIR and ENV; for a capture of\nthe running VM, the sandbox's own. user and work_dir replace, env_vars\nmerge.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] + }, + "tag": { + "description": "mutable Docker-style tag; defaults to \"latest\"", + "type": "string" + } + } + }, + "sandboxes.CreateBrowserPayload": { + "type": "object", + "properties": { + "hidpi": { + "description": "HiDPI renders pages at twice the resolution, so the live view is sharp on\nHiDPI screens, at four times the pixels for the browser to render and\nstream. Off by default, and fixed once the browser is created.", + "type": "boolean" + }, + "idle_ttl_seconds": { + "description": "IdleTTLSeconds stops the browser after this long without use. A stopped\nbrowser resumes with its memory on the next connection. Defaults to the\nsandbox default; 0 disables the idle stop.", + "type": "integer", + "minimum": 0 + }, + "mem_bytes": { + "type": "integer" + }, + "name": { + "description": "Name of the browser sandbox. Generated when omitted, as \"browser-\"\nfollowed by the browser's ID.", + "type": "string" + }, + "vcpus": { + "description": "VCPUs and MemBytes size the browser sandbox, as for any sandbox. With\nneither set, a browser gets 2 vCPUs and 8 GiB.", + "type": "integer" + } + } + }, + "sandboxes.CreateBrowserWindowLinksPayload": { + "type": "object", + "properties": { + "embed_origins": { + "description": "EmbedOrigins are the origins whose pages may show the window's pages in\nan iframe, such as https://app.example.com: https, or http on\nlocalhost, with no path. Without them no page may frame the window.", + "type": "array", + "maxItems": 5, + "items": { + "type": "string" + } + }, + "ttl_seconds": { + "description": "TTLSeconds is how long the links work, from 60 seconds to 24 hours.\nDefaults to 24 hours.", + "type": "integer", + "maximum": 86400, + "minimum": 60 } } }, - "sandboxes.CaptureSnapshotPayload": { + "sandboxes.CreateRegistryPayload": { "type": "object", "required": [ - "name" + "name", + "url" ], "properties": { - "checkpoint": { - "description": "if omitted, creates a fresh checkpoint from the running VM", + "auth_type": { + "type": "string", + "enum": [ + "DOCKER_CONFIG", + "AWS_ROLE" + ] + }, + "aws_role_arn": { "type": "string" }, - "docker_image": { - "description": "sandbox-local Docker image to export", + "name": { "type": "string" }, - "fs_capacity_bytes": { - "description": "required for Docker image export unless the sandbox has a capacity", - "type": "integer" + "password": { + "type": "string" }, - "include_memory": { - "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" + "url": { + "type": "string" }, - "name": { + "username": { "type": "string" } } @@ -80056,6 +87861,18 @@ "sandboxes.CreateSandboxPayload": { "type": "object", "properties": { + "access_delegation": { + "description": "AccessDelegation lets code inside the sandbox call the LangSmith API as you, with at most the permissions granted here. Omit for no access.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxes.AccessDelegation" + } + ] + }, + "cpu_millicores": { + "description": "CPUMillicores optionally requests CPU at millicore granularity (e.g. 500 = 0.5 vCPU); takes precedence over VCPUs. Fractional (sub-vCPU) values are not available for every sandbox.", + "type": "integer" + }, "delete_after_stop_seconds": { "type": "integer" }, @@ -80069,31 +87886,56 @@ "type": "integer" }, "idle_ttl_seconds": { - "type": "integer" + "type": "integer", + "maximum": 2147483640, + "minimum": 0 + }, + "labels": { + "description": "Labels are free-form key/value metadata persisted with the sandbox and returned on reads. Labels from the source snapshot are inherited unless overridden here.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxes.Labels" + } + ] }, "mem_bytes": { + "description": "Memory for the sandbox, in bytes. Memory is tied to CPU at 4 GiB per vCPU: omit it and it follows that ratio; set it and it must stay within 50% of the ratio for the requested CPU, so a 1 vCPU sandbox accepts 2-6 GiB. Setting memory without CPU derives the CPU from the same ratio. Maximum 64 GiB.", "type": "integer" }, - "mounts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/sandboxapi.MountSpec" - } + "mount_config": { + "$ref": "#/components/schemas/sandboxes.SandboxMountConfig" }, "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" }, "restore_memory": { - "description": "RestoreMemory, when non-nil, overrides the server default for\nwhether to resume the sandbox from its captured memory snapshot.\n\n true → resume from the memory snapshot if it exists; cold-boot\n the sandbox otherwise.\n false → always cold-boot, even if a memory snapshot exists.\n nil → use the server default.\n\nApplies to this request only; a later stop+start of the same\nsandbox reverts to the server default.", + "description": "RestoreMemory selects how the sandbox handles a snapshot's captured memory:\n\n nil → if-present: resume from memory when the snapshot has it, else cold-boot (default).\n true → always: resume from memory; rejected if the snapshot has none.\n false → never: always cold-boot.\n\nApplies to this request only.", "type": "boolean" }, + "run_config": { + "description": "RunConfig overrides the snapshot's run config for this sandbox: user and\nwork_dir replace the snapshot's, env_vars merge over it. The result is\nwhat the sandbox boots with, and what a snapshot captured from it carries.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] + }, + "snapshot": { + "description": "Snapshot is a Docker-style name or name:tag reference to boot from. A bare name resolves to name:latest.", + "type": "string" + }, "snapshot_id": { "type": "string" }, "snapshot_name": { + "description": "SnapshotName is a synonym for Snapshot, accepted for compatibility with clients that predate it. Set one or the other.", "type": "string" }, "tag_value_ids": { @@ -80115,17 +87957,127 @@ "name" ], "properties": { + "description": { + "description": "Description says what this snapshot's image can do, so a caller can hand it to an agent as a capability summary. At most 1024 characters.", + "type": "string", + "maxLength": 1024 + }, "docker_image": { "type": "string" }, "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" }, "registry_id": { "type": "string" + }, + "run_config": { + "description": "RunConfig overrides the runtime configuration taken from the Docker image.\nEvery sandbox created from the snapshot runs as the image's USER, in its\nWORKDIR, with its ENV beneath the sandbox's own env_vars; user and\nwork_dir given here replace the image's, and env_vars merge over it.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] + }, + "tag": { + "description": "mutable Docker-style tag; defaults to \"latest\"", + "type": "string" + } + } + }, + "sandboxes.DownloadURLPayload": { + "type": "object", + "required": [ + "path" + ], + "properties": { + "content_disposition": { + "type": "string" + }, + "content_type": { + "type": "string" + }, + "csp_sandbox": { + "description": "CSPSandbox false serves the file with no CSP sandbox directive; omit to keep it.", + "type": "boolean" + }, + "csp_sandbox_flags": { + "description": "CSPSandboxFlags loosen the CSP sandbox the file is served under; omit for the most restrictive policy.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "allow-downloads", + "allow-forms", + "allow-modals", + "allow-orientation-lock", + "allow-pointer-lock", + "allow-popups", + "allow-presentation", + "allow-scripts", + "allow-top-navigation-by-user-activation", + "allow-same-origin" + ] + } + }, + "csp_source_bundles": { + "description": "CSPSourceBundles allow the served file to fetch from named third-party origins; omit to send no fetch directive.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "cdnjs", + "google-fonts", + "jsdelivr", + "unpkg", + "none", + "any" + ] + } + }, + "expires_in_seconds": { + "description": "ExpiresInSeconds is optional; a link with no expiry never expires.", + "type": "integer" + }, + "path": { + "type": "string" + } + } + }, + "sandboxes.DownloadURLResponse": { + "type": "object", + "required": [ + "download_url", + "token" + ], + "properties": { + "download_url": { + "type": "string" + }, + "expires_at": { + "description": "ExpiresAt is null for a link that never expires.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "token": { + "type": "string" } } }, @@ -80159,13 +88111,25 @@ } }, "cwd": { - "type": "string" + "description": "Deprecated: use run_config.work_dir. Rejected when run_config is also set.", + "type": "string", + "deprecated": true }, "env": { + "description": "Deprecated: use run_config.env_vars. Rejected when run_config is also set.", "type": "object", "additionalProperties": { "type": "string" - } + }, + "deprecated": true + }, + "run_config": { + "description": "RunConfig overrides, for this command only, the user, working directory and env the sandbox's commands run with.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] }, "shell": { "type": "string" @@ -80189,6 +88153,138 @@ } } }, + "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": { + "description": "Deprecated: use run_config.work_dir. Rejected when run_config is also set.", + "type": "string", + "deprecated": true + }, + "env": { + "description": "Deprecated: use run_config.env_vars. Rejected when run_config is also set.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "deprecated": true + }, + "idle_timeout_seconds": { + "description": "0 = default, -1 = never idle-kill", + "type": "integer" + }, + "run_config": { + "description": "RunConfig overrides, for this command only, the user, working directory and env the sandbox's commands run with.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] + }, + "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": [ @@ -80202,21 +88298,58 @@ "HeaderTypeWorkspaceSecret" ] }, - "sandboxes.ProxyAWSConfig": { + "sandboxes.Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sandboxes.LoadBrowserExtensionsResponse": { "type": "object", - "required": [ - "access_key_id", - "secret_access_key" - ], "properties": { - "access_key_id": { - "$ref": "#/components/schemas/sandboxes.ProxySecretValue" - }, - "secret_access_key": { - "$ref": "#/components/schemas/sandboxes.ProxySecretValue" + "loaded": { + "description": "Loaded are the ids of the extensions this call loaded; empty when Chrome\nalready had every extension in the directory.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "sandboxes.OpenBrowserTabPayload": { + "type": "object", + "properties": { + "url": { + "description": "URL to open; about:blank when empty.", + "type": "string" } } }, + "sandboxes.ProxyAWSConfig": { + "type": "object", + "oneOf": [ + { + "$ref": "#/components/schemas/sandboxes.ProxyAWSRoleConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.ProxyAWSStaticConfig" + } + ] + }, + "sandboxes.ProxyAzureConfig": { + "type": "object", + "oneOf": [ + { + "$ref": "#/components/schemas/sandboxes.ProxyAzureWorkloadIdentityConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.ProxyAzureAccountKeyConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.ProxyAzureSASConfig" + } + ] + }, "sandboxes.ProxyConfig": { "type": "object", "properties": { @@ -80229,6 +88362,11 @@ "$ref": "#/components/schemas/sandboxes.Callback" } }, + "description": { + "description": "Description says what this configuration as a whole lets the sandbox reach, complementing the per-rule descriptions. At most 1024 characters.", + "type": "string", + "maxLength": 1024 + }, "no_proxy": { "type": "array", "items": { @@ -80243,6 +88381,17 @@ } } }, + "sandboxes.ProxyGCPConfig": { + "type": "object", + "oneOf": [ + { + "$ref": "#/components/schemas/sandboxes.ProxyGCPWorkloadIdentityConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.ProxyGCPServiceAccountConfig" + } + ] + }, "sandboxes.ProxyHeader": { "type": "object", "required": [ @@ -80282,16 +88431,42 @@ "aws": { "$ref": "#/components/schemas/sandboxes.ProxyAWSConfig" }, + "azure": { + "$ref": "#/components/schemas/sandboxes.ProxyAzureConfig" + }, + "description": { + "description": "Description says what this rule lets the sandbox reach, so an agent driving the sandbox can be told its capabilities. At most 1024 characters.", + "type": "string", + "maxLength": 1024 + }, "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" + }, "headers": { "type": "array", "items": { "$ref": "#/components/schemas/sandboxes.ProxyHeader" } }, + "match_headers": { + "description": "MatchHeaders restricts a header injection rule to requests carrying every listed header, each written \"name: value\" with a lowercase name and an exact value. Pair with headers of the same name to swap a placeholder the sandbox sends (e.g. \"authorization: Bearer account-b\") for a real credential, so one host can serve several accounts. Rules are evaluated in order and the first match wins.", + "type": "array", + "items": { + "type": "string" + } + }, "match_hosts": { + "description": "MatchHosts is only accepted for header injection rules. Provider auth\nrules use built-in host matching.", "type": "array", "items": { "type": "string" @@ -80337,13 +88512,131 @@ } } }, + "sandboxes.RegistryListResponse": { + "type": "object", + "properties": { + "offset": { + "type": "integer" + }, + "registries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.RegistryResponse" + } + } + } + }, + "sandboxes.RegistryResponse": { + "type": "object", + "properties": { + "auth_type": { + "type": "string", + "enum": [ + "DOCKER_CONFIG", + "AWS_ROLE" + ] + }, + "aws_role_arn": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "created_by": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "provider": { + "type": "string", + "enum": [ + "DOCKER_REGISTRY", + "HARBOR", + "GHCR", + "ECR", + "GAR", + "DOCKER_HUB" + ] + }, + "repository_search_mode": { + "type": "string", + "enum": [ + "GLOBAL", + "SCOPED", + "NONE" + ] + }, + "updated_at": { + "type": "string" + }, + "updated_by": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "sandboxes.SandboxAWSMountAuthConfig": { + "type": "object", + "oneOf": [ + { + "$ref": "#/components/schemas/sandboxes.SandboxAWSMountRoleAuthConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.SandboxAWSMountStaticAuthConfig" + } + ] + }, + "sandboxes.SandboxAzureMountAuthConfig": { + "type": "object", + "oneOf": [ + { + "$ref": "#/components/schemas/sandboxes.SandboxAzureMountWorkloadIdentityAuthConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.SandboxAzureMountAccountKeyAuthConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.SandboxAzureMountSASAuthConfig" + } + ] + }, + "sandboxes.SandboxGCPMountAuthConfig": { + "type": "object", + "oneOf": [ + { + "$ref": "#/components/schemas/sandboxes.SandboxGCPMountWorkloadIdentityAuthConfig" + }, + { + "$ref": "#/components/schemas/sandboxes.SandboxGCPMountServiceAccountAuthConfig" + } + ] + }, "sandboxes.SandboxListResponse": { "type": "object", "properties": { + "items": { + "description": "This page of sandboxes.", + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.SandboxResponse" + } + }, + "next_cursor": { + "description": "Cursor for the next page, or null on the last page. A non-null value is\nthe only signal that more pages exist. Treat it as opaque.", + "type": "string" + }, "offset": { + "description": "Deprecated: use next_cursor. Offset to request for the next page, or 0\nwhen no pages remain.", "type": "integer" }, "sandboxes": { + "description": "Deprecated: use items. Duplicates items.", "type": "array", "items": { "$ref": "#/components/schemas/sandboxes.SandboxResponse" @@ -80351,9 +88644,48 @@ } } }, + "sandboxes.SandboxMountAuthConfig": { + "type": "object", + "properties": { + "aws": { + "$ref": "#/components/schemas/sandboxes.SandboxAWSMountAuthConfig" + }, + "azure": { + "$ref": "#/components/schemas/sandboxes.SandboxAzureMountAuthConfig" + }, + "gcp": { + "$ref": "#/components/schemas/sandboxes.SandboxGCPMountAuthConfig" + } + } + }, + "sandboxes.SandboxMountConfig": { + "type": "object", + "properties": { + "auth": { + "$ref": "#/components/schemas/sandboxes.SandboxMountAuthConfig" + }, + "mounts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxapi.MountSpec" + } + } + } + }, "sandboxes.SandboxResponse": { "type": "object", "properties": { + "access_delegation": { + "description": "AccessDelegation is the LangSmith access this sandbox was granted, absent when it has none. It is reported exactly as it was requested at create.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxes.AccessDelegation" + } + ] + }, + "cpu_millicores": { + "type": "integer" + }, "created_at": { "type": "string" }, @@ -80375,21 +88707,32 @@ "idle_ttl_seconds": { "type": "integer" }, + "labels": { + "$ref": "#/components/schemas/sandboxes.Labels" + }, "mem_bytes": { "type": "integer" }, - "mounts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/sandboxapi.MountSpec" - } + "mount_config": { + "$ref": "#/components/schemas/sandboxes.SandboxMountConfig" }, "name": { "type": "string" }, + "preserve_memory_on_stop": { + "type": "boolean" + }, "proxy_config": { "$ref": "#/components/schemas/sandboxes.ProxyConfig" }, + "run_config": { + "description": "RunConfig is what the sandbox's commands run with: the user, working directory and base env beneath env_vars.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] + }, "size_class": { "type": "string" }, @@ -80411,25 +88754,182 @@ "updated_by": { "type": "string" }, - "vcpus": { - "type": "integer" + "vcpus": { + "type": "integer" + } + } + }, + "sandboxes.SandboxStatusResponse": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "status_message": { + "type": "string" + } + } + }, + "sandboxes.SandboxUsageCost": { + "type": "object", + "required": [ + "lcu", + "lsu", + "period_start", + "resource_id", + "resource_type" + ], + "properties": { + "lcu": { + "description": "Recorded compute usage in LangSmith Compute Units (LCU), as a decimal string\nwith up to six fractional digits and trailing zeros omitted. Snapshots return \"0\".", + "type": "string", + "format": "decimal", + "example": "1.234567" + }, + "lsu": { + "description": "Allocated storage usage in LangSmith Storage Units (LSU), as a decimal string\nwith up to six fractional digits and trailing zeros omitted.", + "type": "string", + "format": "decimal", + "example": "0.000123" + }, + "period_start": { + "type": "string", + "format": "date-time" + }, + "resource_id": { + "type": "string", + "format": "uuid" + }, + "resource_type": { + "$ref": "#/components/schemas/sandboxes.UsageCostResourceType" + } + } + }, + "sandboxes.SandboxUsageCostTotals": { + "type": "object", + "required": [ + "lcu", + "lsu" + ], + "properties": { + "lcu": { + "type": "string", + "format": "decimal" + }, + "lsu": { + "type": "string", + "format": "decimal" + } + } + }, + "sandboxes.SandboxUsageCostsResponse": { + "type": "object", + "required": [ + "items", + "next_cursor" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.SandboxUsageCost" + } + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "totals": { + "description": "Totals cover the entire filtered interval, independently of the cursor.\nOmitted unless requested and unrestricted resource access is verified.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxes.SandboxUsageCostTotals" + } + ] + } + } + }, + "sandboxes.ServiceURLGrantListResponse": { + "type": "object", + "required": [ + "items", + "next_cursor" + ], + "properties": { + "items": { + "description": "This page of the ports the sandbox is shared on.", + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.ServiceURLGrantResponse" + } + }, + "next_cursor": { + "description": "Cursor for the next page, or null on the last page. A non-null value is\nthe only signal that more pages exist. Treat it as opaque.", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } } }, - "sandboxes.SandboxStatusResponse": { + "sandboxes.ServiceURLGrantResponse": { "type": "object", + "required": [ + "access", + "created_at", + "port" + ], "properties": { - "status": { - "type": "string" + "access": { + "description": "How the port is shared: \"token\" for a minted service token, or\n\"restricted\"/\"workspace\" for LangSmith login.", + "type": "string", + "enum": [ + "token", + "restricted", + "workspace" + ] }, - "status_message": { - "type": "string" + "created_at": { + "type": "string", + "format": "date-time" + }, + "created_by": { + "description": "The LangSmith user who first shared this port, when known.", + "type": "string", + "format": "uuid" + }, + "expires_at": { + "description": "When the share expires. Set only for \"token\"; a login grant does not expire.", + "type": "string", + "format": "date-time" + }, + "port": { + "type": "integer" } } }, "sandboxes.ServiceURLPayload": { "type": "object", "properties": { + "access": { + "description": "Access selects the login mode, mutually exclusive with the minted token.\nOmit the field for token mode: mint a short-lived service token (default).\n \"restricted\" — LangSmith login: the sandbox's creator, or any user with SandboxesExec on it (admins by default).\n \"workspace\" — LangSmith login: any member of the owning workspace.\n \"off\" — remove an existing LangSmith login grant and mint a token.\nA LangSmith login grant is durable; token mode is refused (409) while one exists.", + "type": "string", + "enum": [ + "restricted", + "workspace", + "off" + ] + }, "expires_in_seconds": { "type": "integer" }, @@ -80441,6 +88941,14 @@ "sandboxes.ServiceURLResponse": { "type": "object", "properties": { + "access": { + "description": "Access echoes the enabled LangSmith login level (\"restricted\"/\"workspace\"); omitted in token mode.", + "type": "string", + "enum": [ + "restricted", + "workspace" + ] + }, "browser_url": { "type": "string" }, @@ -80451,17 +88959,44 @@ "type": "string" }, "token": { + "description": "Token and ExpiresAt are empty in LangSmith login mode (no token is minted).", "type": "string" } } }, + "sandboxes.SetBrowserControllerPayload": { + "type": "object", + "properties": { + "controller": { + "description": "Controller is \"user\" to give the window to a person, or \"agent\" to give\nit back to the attached sandbox.", + "type": "string", + "enum": [ + "agent", + "user" + ] + } + } + }, "sandboxes.SnapshotListResponse": { "type": "object", "properties": { + "items": { + "description": "This page of snapshots.", + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.SnapshotResponse" + } + }, + "next_cursor": { + "description": "Cursor for the next page, or null on the last page. A non-null value is\nthe only signal that more pages exist. Treat it as opaque.", + "type": "string" + }, "offset": { + "description": "Deprecated: use next_cursor. Offset to request for the next page, or 0\nwhen no pages remain.", "type": "integer" }, "snapshots": { + "description": "Deprecated: use items. Duplicates items.", "type": "array", "items": { "$ref": "#/components/schemas/sandboxes.SnapshotResponse" @@ -80469,6 +89004,31 @@ } } }, + "sandboxes.SnapshotNameResponse": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/sandboxes.SnapshotNameTag" + } + } + } + }, + "sandboxes.SnapshotNameTag": { + "type": "object", + "properties": { + "snapshot_id": { + "type": "string" + }, + "tag": { + "type": "string" + } + } + }, "sandboxes.SnapshotResponse": { "type": "object", "properties": { @@ -80478,6 +89038,10 @@ "created_by": { "type": "string" }, + "description": { + "description": "Description says what this snapshot's image can do, so a caller can hand it to an agent as a capability summary.", + "type": "string" + }, "docker_image": { "type": "string" }, @@ -80493,6 +89057,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" @@ -80503,6 +89070,14 @@ "registry_id": { "type": "string" }, + "run_config": { + "description": "RunConfig is what sandboxes from this snapshot boot with. Absent on\nsnapshots built before it was recorded, which run as root with their own env.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] + }, "source_sandbox_id": { "type": "string" }, @@ -80512,14 +89087,67 @@ "status_message": { "type": "string" }, + "tags": { + "description": "Tags currently resolving to this snapshot, under Name. A snapshot with no\ntags is dangling — addressable only by id.", + "type": "array", + "items": { + "type": "string" + } + }, "updated_at": { "type": "string" } } }, + "sandboxes.UpdateBrowserAttachmentPayload": { + "type": "object", + "properties": { + "height": { + "type": "integer", + "maximum": 2400, + "minimum": 300 + }, + "width": { + "description": "Width and Height are the window's new page size in CSS pixels.", + "type": "integer", + "maximum": 3840, + "minimum": 400 + } + } + }, + "sandboxes.UpdateRegistryPayload": { + "type": "object", + "properties": { + "auth_type": { + "type": "string", + "enum": [ + "DOCKER_CONFIG", + "AWS_ROLE" + ] + }, + "aws_role_arn": { + "type": "string" + }, + "name": { + "type": "string" + }, + "password": { + "type": "string" + }, + "url": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, "sandboxes.UpdateSandboxPayload": { "type": "object", "properties": { + "cpu_millicores": { + "type": "integer" + }, "delete_after_stop_seconds": { "type": "integer" }, @@ -80527,9 +89155,12 @@ "type": "integer" }, "idle_ttl_seconds": { - "type": "integer" + "type": "integer", + "maximum": 2147483640, + "minimum": 0 }, "mem_bytes": { + "description": "New memory for the sandbox, in bytes. The 4 GiB per vCPU ratio applies when the sandbox is created; a resize enforces only the maximum of 64 GiB.", "type": "integer" }, "name": { @@ -80538,6 +89169,14 @@ "proxy_config": { "$ref": "#/components/schemas/sandboxes.ProxyConfig" }, + "run_config": { + "description": "RunConfig changes what subsequent commands run with: user and work_dir\nreplace the current values, env_vars merge over them. Commands already\nrunning are unaffected.", + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.RunConfig" + } + ] + }, "tag_value_ids": { "type": "array", "items": { @@ -80560,6 +89199,17 @@ } } }, + "sandboxes.UsageCostResourceType": { + "type": "string", + "enum": [ + "SANDBOX", + "SNAPSHOT" + ], + "x-enum-varnames": [ + "UsageCostResourceSandbox", + "UsageCostResourceSnapshot" + ] + }, "sandboxes.UsageResponse": { "type": "object", "properties": { @@ -80630,6 +89280,9 @@ "created_at": { "type": "string" }, + "created_by": { + "type": "string" + }, "description": { "type": "string" }, @@ -80654,6 +89307,9 @@ "created_at": { "type": "string" }, + "created_by": { + "type": "string" + }, "description": { "type": "string" }, @@ -80682,26 +89338,7 @@ } } }, - "skills.CreateSkillRequest": { - "type": "object", - "required": [ - "files", - "name" - ], - "properties": { - "files": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/skills.FileEntry" - } - }, - "name": { - "type": "string", - "maxLength": 64 - } - } - }, - "skills.ErrorResponse": { + "secrets.ErrorResponse": { "type": "object", "properties": { "code": { @@ -80718,24 +89355,13 @@ } } }, - "skills.FileEntry": { - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "skills.ListSkillsResponse": { + "secrets.ListResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { - "$ref": "#/components/schemas/skills.Skill" + "$ref": "#/components/schemas/secrets.SecretItem" } }, "next_cursor": { @@ -80743,82 +89369,136 @@ } } }, - "skills.Skill": { + "secrets.SecretItem": { "type": "object", "properties": { - "commit_hash": { - "type": "string" - }, - "commit_id": { - "description": "Omitted on the lightweight list (include_files=false): commit_id is not on\nthe upstream repos-list contract, only commit_hash is.", - "type": "string" + "name": { + "type": "string", + "example": "OPENAI_API_KEY" }, - "created_at": { + "set": { + "description": "Set is always true for items returned by the list endpoint — a key only\nappears when it has a value. It lets a client diff this list against a\nmodel's required_secrets to find which required keys are still missing.", + "type": "boolean", + "example": true + } + } + }, + "secrets.bulkUpsertItem": { + "type": "object", + "properties": { + "key": { "type": "string" }, - "description": { + "value": { "type": "string" - }, - "files": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/skills.FileEntry" - } - }, - "id": { + } + } + }, + "secrets.putRequest": { + "type": "object", + "properties": { + "value": { "type": "string" + } + } + }, + "share.CreateShareTokenRequestBody": { + "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" }, - "name": { + "trace_id": { + "description": "trace_id is the root trace UUID to share.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" + } + } + }, + "share.CreateShareTokenResponseBody": { + "type": "object", + "properties": { + "share_token": { + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" + } + } + }, + "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.ParseErrorDetails": { + "description": "Structured fields describing an adapter parse failure.", + "type": "object", + "required": [ + "adapter", + "item_type" + ], + "properties": { + "adapter": { "type": "string" }, - "owners": { - "type": "array", - "items": { - "$ref": "#/components/schemas/skills.SkillOwner" - } - }, - "updated_at": { + "item_type": { "type": "string" }, - "visibility": { + "run_id": { "type": "string" } } }, - "skills.SkillOwner": { + "shared.ProblemDetails": { + "description": "RFC 7807 problem details returned on V2 API errors.", "type": "object", "properties": { - "created_at": { + "detail": { "type": "string" }, - "email": { + "details": { + "description": "Details is a LangSmith extension carrying structured fields for ErrorClass.", + "allOf": [ + { + "$ref": "#/components/schemas/shared.ParseErrorDetails" + } + ] + }, + "error_class": { + "description": "ErrorClass is a LangSmith extension sub-categorizing a status code.\nAdditional values require expanding this enum and adding a oneOf\ndiscriminator on Details to keep the class↔details contract typed.", + "type": "string", + "enum": [ + "PARSE_FAILURE" + ] + }, + "instance": { "type": "string" }, - "full_name": { + "remedy": { + "description": "Remedy is a LangSmith extension for user-recoverable errors.", "type": "string" }, - "identity_id": { + "status": { + "type": "integer" + }, + "title": { "type": "string" }, - "ls_user_id": { + "type": { "type": "string" } } }, - "skills.UpdateSkillRequest": { - "type": "object", - "required": [ - "files" - ], - "properties": { - "files": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/skills.FileEntry" - } - } - } - }, "tag_transitions.ErrorResponse": { "type": "object", "properties": { @@ -80876,385 +89556,981 @@ } } }, - "threads.BulkUpdateThreadResult": { + "tenants.ErrorResponse": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "detail": { + "type": "string" + }, + "status": { + "type": "integer" + }, + "type": { + "type": "string" + } + } + }, + "tenants.ListTenantsResponse": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tenants.Tenant" + } + }, + "next_cursor": { + "type": "string" + } + } + }, + "tenants.Tenant": { "type": "object", "properties": { - "error_code": { + "created_at": { + "type": "string" + }, + "data_plane_url": { "type": "string" }, "id": { - "type": "string", - "format": "uuid" + "type": "string" }, - "message": { + "is_personal": { + "type": "boolean" + }, + "name": { "type": "string" }, - "status": { + "organization_id": { + "type": "string" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + } + }, + "tenant_handle": { + "type": "string" + } + } + }, + "threads.PublicSharedThreadTraceRunsResponseBody": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/query.RunResponse" + } + } + } + }, + "threads.QuerySingleThreadStatsResponseBody": { + "type": "object", + "properties": { + "completion_cost": { + "description": "`completion_cost` is the sum of per-trace completion costs across the thread, in USD. Populated when `COMPLETION_COST` is selected.", + "type": "number" + }, + "completion_cost_details": { + "description": "`completion_cost_details` is the per-sub-category sum of completion cost details across the thread. Populated when `COMPLETION_COST_DETAILS` is selected.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunCompletionCostDetails" + } + ] + }, + "completion_token_details": { + "description": "`completion_token_details` is the per-sub-category sum of completion token details across the thread. Populated when `COMPLETION_TOKEN_DETAILS` is selected.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunCompletionTokenDetails" + } + ] + }, + "completion_tokens": { + "description": "`completion_tokens` is the sum of per-trace completion token counts across the thread. Populated when `COMPLETION_TOKENS` is selected.", + "type": "integer" + }, + "feedback_stats": { + "description": "`feedback_stats` aggregates run-level feedback across the thread's traces, keyed by feedback key. Populated when `FEEDBACK_STATS` is selected.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunFeedbackStats" + } + ] + }, + "first_start_time": { + "description": "`first_start_time` is the earliest trace start time in the thread (RFC3339). Populated when `FIRST_START_TIME` is selected.", "type": "string", - "enum": [ - "success", - "failure" + "format": "date-time" + }, + "last_end_time": { + "description": "`last_end_time` is the latest trace end time in the thread (RFC3339). Populated when `LAST_END_TIME` is selected.", + "type": "string", + "format": "date-time" + }, + "last_start_time": { + "description": "`last_start_time` is the latest trace start time in the thread (RFC3339). Populated when `LAST_START_TIME` is selected.", + "type": "string", + "format": "date-time" + }, + "latency_p50_seconds": { + "description": "`latency_p50_seconds` is the approximate p50 of trace latency across the thread, in seconds. Populated when `LATENCY_P50` is selected.", + "type": "number" + }, + "latency_p99_seconds": { + "description": "`latency_p99_seconds` is the approximate p99 of trace latency across the thread, in seconds. Populated when `LATENCY_P99` is selected.", + "type": "number" + }, + "prompt_cost": { + "description": "`prompt_cost` is the sum of per-trace prompt costs across the thread, in USD. Populated when `PROMPT_COST` is selected.", + "type": "number" + }, + "prompt_cost_details": { + "description": "`prompt_cost_details` is the per-sub-category sum of prompt cost details across the thread. Populated when `PROMPT_COST_DETAILS` is selected.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunPromptCostDetails" + } + ] + }, + "prompt_token_details": { + "description": "`prompt_token_details` is the per-sub-category sum of prompt token details across the thread. Populated when `PROMPT_TOKEN_DETAILS` is selected.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunPromptTokenDetails" + } ] + }, + "prompt_tokens": { + "description": "`prompt_tokens` is the sum of per-trace prompt token counts across the thread. Populated when `PROMPT_TOKENS` is selected.", + "type": "integer" + }, + "total_cost": { + "description": "`total_cost` is the sum of per-trace total costs across the thread, in USD. Populated when `TOTAL_COST` is selected.", + "type": "number" + }, + "total_tokens": { + "description": "`total_tokens` is the sum of per-trace total token counts across the thread. Populated when `TOTAL_TOKENS` is selected.", + "type": "integer" + }, + "turns": { + "description": "`turns` is the number of distinct traces (turns) in the thread. Populated when `TURNS` is selected.", + "type": "integer" } } }, - "threads.BulkUpdateThreadsRequest": { + "threads.QueryThreadStatsRequestBody": { "type": "object", + "required": [ + "project_id", + "select" + ], "properties": { - "data": { - "$ref": "#/components/schemas/threads.UpdateThreadRequest" + "filter": { + "description": "`filter` is a deprecated, unscoped LangSmith filter expression evaluated\nagainst trace root runs. Kept for compatibility with deployments that\nserve this endpoint via the legacy ClickHouse backend (no SmithDB query\nservice configured); prefer `trace_filter`, `tree_filter`, or\n`thread_filter` otherwise, since those require SmithDB.", + "type": "string", + "example": "eq(status, \"error\")" + }, + "max_start_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). Defaults to 1 day before now (UTC) when omitted.", + "type": "string", + "format": "date-time" + }, + "project_id": { + "description": "`project_id` is the tracing project UUID.", + "type": "string", + "format": "uuid", + "example": "0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328" + }, + "select": { + "description": "`select` lists the aggregate statistics to compute and return. At least one value is required.", + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/components/schemas/threads.ThreadStatsSelectField" + }, + "example": [ + "THREAD_COUNT", + "TRACE_COUNT", + "TOTAL_TOKENS", + "TOTAL_COST" + ] + }, + "thread_filter": { + "description": "`thread_filter` narrows eligible threads using a LangSmith filter expression evaluated against the complete thread summary.", + "type": "string", + "example": "gte(turn_count, 3)" + }, + "trace_filter": { + "description": "`trace_filter` narrows eligible threads to those containing a trace whose root run matches this LangSmith filter expression.", + "type": "string", + "example": "eq(status, \"error\")" + }, + "tree_filter": { + "description": "`tree_filter` narrows eligible threads to those containing a matching run anywhere in a trace tree.", + "type": "string", + "example": "has(tags, \"production\")" + } + } + }, + "threads.QueryThreadStatsResponseBody": { + "type": "object", + "properties": { + "completion_cost": { + "description": "`completion_cost` is the completion cost across matching traces in USD.", + "type": "number" + }, + "completion_cost_details": { + "description": "`completion_cost_details` contains completion-cost totals by category.", + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } + }, + "completion_token_details": { + "description": "`completion_token_details` contains completion-token totals by category.", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + }, + "completion_tokens": { + "description": "`completion_tokens` is the sum of completion tokens across matching traces.", + "type": "integer" + }, + "error_rate": { + "description": "`error_rate` is the fraction of matching traces that contain an error.", + "type": "number" + }, + "first_token_p50_seconds": { + "description": "`first_token_p50_seconds` is the approximate median time to first token in seconds. Populated when `FIRST_TOKEN_P50` is selected.", + "type": "number" + }, + "first_token_p99_seconds": { + "description": "`first_token_p99_seconds` is the approximate p99 time to first token in seconds. Populated when `FIRST_TOKEN_P99` is selected.", + "type": "number" + }, + "latency_p50_seconds": { + "description": "`latency_p50_seconds` is the approximate median trace latency in seconds. Populated when `LATENCY_P50` is selected.", + "type": "number" + }, + "latency_p99_seconds": { + "description": "`latency_p99_seconds` is the approximate p99 trace latency in seconds. Populated when `LATENCY_P99` is selected.", + "type": "number" + }, + "median_tokens": { + "description": "`median_tokens` is the approximate median of total tokens across matching traces. Populated when `MEDIAN_TOKENS` is selected.", + "type": "integer" + }, + "prompt_cost": { + "description": "`prompt_cost` is the prompt cost across matching traces in USD.", + "type": "number" + }, + "prompt_cost_details": { + "description": "`prompt_cost_details` contains prompt-cost totals by category.", + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } + }, + "prompt_token_details": { + "description": "`prompt_token_details` contains prompt-token totals by category.", + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + }, + "prompt_tokens": { + "description": "`prompt_tokens` is the sum of prompt tokens across matching traces.", + "type": "integer" + }, + "streaming_rate": { + "description": "`streaming_rate` is the fraction of completed matching traces that streamed tokens.", + "type": "number" + }, + "thread_count": { + "description": "`thread_count` is the number of distinct threads matching the query. Populated when `THREAD_COUNT` is selected.", + "type": "integer" + }, + "thread_feedback_stats": { + "description": "`thread_feedback_stats` contains aggregate thread-level feedback statistics keyed by feedback key. Populated when `THREAD_FEEDBACK_STATS` is selected.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunFeedbackStats" + } + ] }, - "thread_ids": { - "type": "array", - "items": { - "type": "string" - } + "total_cost": { + "description": "`total_cost` is the total cost across matching traces in USD.", + "type": "number" + }, + "total_tokens": { + "description": "`total_tokens` is the sum of all tokens across matching traces.", + "type": "integer" + }, + "trace_count": { + "description": "`trace_count` is the number of traces in the matching threads. Populated when `TRACE_COUNT` is selected.", + "type": "integer" } } }, - "threads.BulkUpdateThreadsResponse": { + "threads.QueryThreadTracesResponseBody": { "type": "object", "properties": { - "results": { + "items": { + "description": "`items` is the page of root traces in this thread. Which properties are populated on each trace depends on the `selects` query parameter.", "type": "array", "items": { - "$ref": "#/components/schemas/threads.BulkUpdateThreadResult" + "$ref": "#/components/schemas/threads.ThreadTraceListItem" } + }, + "next_cursor": { + "description": "`next_cursor` is the opaque cursor to pass as `cursor` on the next request. Null on the final page.", + "type": "string", + "example": "eyJydW5zX2N1cnNvciI6Imx0KGN1cnNvciwiLi4uIikifQ==" } } }, - "threads.CountResponse": { - "type": "object", - "properties": { - "attention_count": { - "type": "integer" - } - } - }, - "threads.CreateThreadAndRunRequest": { + "threads.QueryThreadsRequestBody": { "type": "object", "properties": { - "agent_id": { + "ai_search": { + "description": "`ai_search` is a plain-language criterion evaluated against the messages from the agent trajectory scoped to the thread.\nAND-ed with the ordinary filters. Requires semantic filtering enabled for the deployment.\nMust contain nonempty text of at most 2000 UTF-8 bytes.", "type": "string", - "example": "11111111-1111-1111-1111-111111111111" + "maxLength": 2000, + "minLength": 1, + "example": "A conversation about a refund request" }, - "thread": { - "$ref": "#/components/schemas/threads.CreateThreadAndRunThread" - } - } - }, - "threads.CreateThreadAndRunThread": { - "type": "object", - "properties": { - "if_exists": { + "cursor": { + "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.", + "type": "string" + }, + "filter": { + "description": "`filter` narrows which threads are returned, using a LangSmith filter expression evaluated against each thread's root run.\nFor example: has(tags, \"production\") or eq(status, \"error\").\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string" + }, + "max_start_time": { + "description": "`max_start_time` is the exclusive upper bound on thread activity (RFC3339 date-time). Defaults to now (UTC) when omitted.", "type": "string", - "enum": [ - "do_nothing", - "raise" - ] + "format": "date-time" }, - "metadata": { - "type": "object", - "additionalProperties": {} + "min_start_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" }, - "options": { - "$ref": "#/components/schemas/threads.CreateThreadOptions" + "page_size": { + "description": "`page_size` is the maximum number of threads to return in this response. Defaults to 20 when omitted; must be between 1 and 100 inclusive when set. The response may contain fewer threads than `page_size` even when `next_cursor` is non-null.", + "type": "integer", + "default": 20, + "maximum": 100, + "minimum": 1, + "example": 20 }, - "thread_id": { + "project_id": { + "description": "`project_id` is the tracing project UUID.", "type": "string", - "format": "uuid" + "format": "uuid", + "example": "0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328" + }, + "thread_filter": { + "description": "`thread_filter` narrows results using a LangSmith filter expression evaluated against each complete thread summary.\nSelf-hosted deployments require LangSmith v0.17 or later; unsupported deployments return 501.\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string", + "example": "gte(turn_count, 3)" + }, + "trace_filter": { + "description": "`trace_filter` narrows results to threads containing at least one trace whose root run matches this LangSmith filter expression.\nTrace-level aggregate fields are evaluated using the complete trace summary.\nSelf-hosted deployments require LangSmith v0.17 or later; unsupported deployments return 501.\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string", + "example": "eq(status, \"error\")" + }, + "tree_filter": { + "description": "`tree_filter` narrows results to threads containing at least one trace with a matching run anywhere in its run tree.\nSelf-hosted deployments require LangSmith v0.17 or later; unsupported deployments return 501.\nSee https://docs.langchain.com/langsmith/trace-query-syntax#filter-query-language for syntax.", + "type": "string", + "example": "has(tags, \"production\")" } } }, - "threads.CreateThreadOptions": { + "threads.QueryThreadsResponseBody": { "type": "object", "properties": { - "skip_memory_write_protection": { - "description": "SkipMemoryWriteProtection lets runs on this thread bypass the default\nlong-term-memory write protection.", - "type": "boolean" + "items": { + "description": "`items` is the page of thread summaries, sorted by the thread's most recent activity.", + "type": "array", + "items": { + "$ref": "#/components/schemas/threads.ThreadListItem" + } }, - "test_run": { - "description": "TestRun marks the thread as a test run; filtered out of usage and analytics.", - "type": "boolean" + "next_cursor": { + "description": "`next_cursor` is the opaque cursor to pass as `cursor` on the next request. Null on the final page.", + "type": "string", + "example": "eyJydW5zX2N1cnNvciI6Imx0KGN1cnNvciwiLi4uIikifQ==" } } }, - "threads.CreateThreadRequest": { + "threads.SandboxActivationProblem": { "type": "object", + "required": [ + "code", + "detail", + "status", + "title", + "type" + ], "properties": { - "agent_id": { + "code": { "type": "string", - "example": "11111111-1111-1111-1111-111111111111" + "example": "sandbox_not_ready" }, - "if_exists": { + "detail": { "type": "string", - "enum": [ - "do_nothing", - "raise" - ] + "example": "The thread does not have a sandbox slug to activate." }, - "metadata": { - "type": "object", - "additionalProperties": {} + "status": { + "type": "integer", + "example": 409 }, - "options": { - "$ref": "#/components/schemas/threads.CreateThreadOptions" + "title": { + "type": "string", + "example": "Conflict" }, - "thread_id": { + "type": { "type": "string", - "format": "uuid" + "example": "about:blank" } } }, - "threads.ErrorResponse": { + "threads.SandboxRef": { "type": "object", + "required": [ + "sandbox_slug", + "scope", + "status" + ], "properties": { - "code": { - "type": "string" + "sandbox_slug": { + "type": "string", + "example": "sandbox-abc123" }, - "detail": { - "type": "string" + "scope": { + "enum": [ + "agent", + "thread" + ], + "allOf": [ + { + "$ref": "#/components/schemas/threads.SandboxScope" + } + ], + "example": "agent" }, "status": { - "type": "integer" - }, - "type": { - "type": "string" + "enum": [ + "provisioning", + "ready", + "failed", + "stopped", + "deleting" + ], + "allOf": [ + { + "$ref": "#/components/schemas/threads.SandboxStatus" + } + ], + "example": "ready" } } }, - "threads.ListThreadsResponse": { - "type": "object", - "properties": { - "next_cursor": { - "type": "string" - }, - "threads": { - "type": "array", - "items": { - "$ref": "#/components/schemas/threads.ThreadSummary" - } - } - } + "threads.SandboxScope": { + "type": "string", + "enum": [ + "agent", + "thread" + ], + "x-enum-varnames": [ + "SandboxScopeAgent", + "SandboxScopeThread" + ] }, - "threads.OptionalField-bool": { - "type": "object", - "properties": { - "set": { - "type": "boolean" - }, - "value": { - "type": "boolean" - } - } + "threads.SandboxStatus": { + "type": "string", + "enum": [ + "provisioning", + "ready", + "failed", + "stopped", + "deleting" + ], + "x-enum-varnames": [ + "SandboxStatusProvisioning", + "SandboxStatusReady", + "SandboxStatusFailed", + "SandboxStatusStopped", + "SandboxStatusDeleting" + ] + }, + "threads.SingleThreadStatsSelectField": { + "type": "string", + "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" + ], + "x-enum-varnames": [ + "SingleThreadStatsSelectTurns", + "SingleThreadStatsSelectFirstStartTime", + "SingleThreadStatsSelectLastStartTime", + "SingleThreadStatsSelectLastEndTime", + "SingleThreadStatsSelectLatencyP50", + "SingleThreadStatsSelectLatencyP99", + "SingleThreadStatsSelectPromptTokens", + "SingleThreadStatsSelectPromptCost", + "SingleThreadStatsSelectCompletionTokens", + "SingleThreadStatsSelectCompletionCost", + "SingleThreadStatsSelectTotalTokens", + "SingleThreadStatsSelectTotalCost", + "SingleThreadStatsSelectPromptTokenDetails", + "SingleThreadStatsSelectCompletionTokenDetails", + "SingleThreadStatsSelectPromptCostDetails", + "SingleThreadStatsSelectCompletionCostDetails", + "SingleThreadStatsSelectFeedbackStats" + ] }, - "threads.OptionalField-string": { + "threads.ThreadListItem": { "type": "object", "properties": { - "set": { - "type": "boolean" + "count": { + "description": "`count` is how many root traces (conversation turns) fall in this thread for the query time range.", + "type": "integer", + "example": 3 }, - "value": { + "feedback_stats": { + "description": "`feedback_stats` is the aggregated feedback across traces in the thread, keyed by feedback key; shape matches `feedback_stats` on a single run.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunFeedbackStats" + } + ] + }, + "first_inputs": { + "description": "`first_inputs` is a truncated preview of inputs from the earliest trace in the thread for the query window.", "type": "string" - } - } - }, - "threads.Thread": { - "type": "object", - "properties": { - "agent_id": { - "type": "string", - "format": "uuid" }, - "created_at": { + "first_trace_id": { + "description": "`first_trace_id` is the root trace UUID for the chronologically first trace in the query time window.", "type": "string", - "format": "date-time" + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" }, - "id": { - "type": "string", - "format": "uuid" + "last_error": { + "description": "`last_error` is a short error summary from the most recent failing trace in the thread. Absent when there is no error in the window.", + "type": "string" }, - "metadata": { - "type": "object", - "additionalProperties": {} + "last_outputs": { + "description": "`last_outputs` is a truncated preview of outputs from the latest trace in the thread for the query window.", + "type": "string" }, - "status": { + "last_trace_id": { + "description": "`last_trace_id` is the root trace UUID for the chronologically last trace in the query time window.", "type": "string", - "enum": [ - "idle", - "busy", - "interrupted", - "error" - ] + "format": "uuid", + "example": "0190a1b2-c3d4-7ef0-a5b6-6ea3a82e9328" }, - "updated_at": { - "type": "string", - "format": "date-time" - } - } - }, - "threads.ThreadDetail": { - "type": "object", - "properties": { - "agent_id": { - "type": "string", - "format": "uuid" + "latency_p50": { + "description": "`latency_p50` is the approximate median end-to-end latency of traces in the thread, in seconds.", + "type": "number", + "example": 0.15 }, - "config": { - "type": "object", - "additionalProperties": {} + "latency_p99": { + "description": "`latency_p99` is the approximate 99th percentile end-to-end latency of traces in the thread, in seconds.", + "type": "number", + "example": 0.42 }, - "created_at": { + "max_start_time": { + "description": "`max_start_time` is the latest trace start time in the thread (RFC3339 date-time).", "type": "string", - "format": "date-time" + "format": "date-time", + "example": "2025-01-15T12:05:00.000Z" }, - "error": {}, - "id": { + "min_start_time": { + "description": "`min_start_time` is the earliest trace start time in the thread (RFC3339 date-time).", "type": "string", - "format": "uuid" - }, - "interrupts": { - "type": "object", - "additionalProperties": {} + "format": "date-time", + "example": "2025-01-15T12:00:00.000Z" }, - "metadata": { - "type": "object", - "additionalProperties": {} + "num_errored_turns": { + "description": "`num_errored_turns` is the count of root traces in the thread (within the query window) whose status was an error.", + "type": "integer", + "example": 1 }, - "state_updated_at": { - "type": "string", - "format": "date-time" + "query_metadata": { + "description": "`query_metadata` describes why this thread matched the query, including `sem_filter_score` when a semantic filter is used. Returned automatically, or null when unavailable.", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ] }, - "status": { + "start_time": { + "description": "`start_time` is a reference start time for this row (RFC3339 date-time), such as for sorting.", "type": "string", - "enum": [ - "idle", - "busy", - "interrupted", - "error" - ] + "format": "date-time", + "example": "2025-01-15T12:00:00.000Z" }, "thread_id": { + "description": "`thread_id` identifies this conversation thread within the project from the request body `project_id`.", "type": "string", - "format": "uuid" + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" }, - "title": { - "type": "string" + "total_cost": { + "description": "`total_cost` is the sum of estimated USD cost across those traces.", + "type": "number", + "example": 0.045 }, - "updated_at": { - "type": "string", - "format": "date-time" + "total_cost_details": { + "description": "`total_cost_details` sums per-category estimated USD cost across traces in the thread. Keys mirror `total_token_details`.\n\nExample: `{\"cache_read\": 0.012, \"reasoning\": 0.008}`.", + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } }, - "values": { + "total_token_details": { + "description": "`total_token_details` sums per-category token counts across traces in the thread. Keys are model-specific category names (for example `cache_read`, `cache_write`, `reasoning`, `audio`).\n\nExample: `{\"cache_read\": 400, \"reasoning\": 120}`.", "type": "object", - "additionalProperties": {} + "additionalProperties": { + "type": "integer", + "format": "int64" + } + }, + "total_tokens": { + "description": "`total_tokens` is the sum of token usage across those traces.", + "type": "integer", + "example": 450 + }, + "trace_id": { + "description": "`trace_id` is a representative root trace UUID when the summary includes one, for example for deep links.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9328" } } }, - "threads.ThreadSummary": { + "threads.ThreadStatsSelectField": { + "type": "string", + "enum": [ + "THREAD_COUNT", + "TRACE_COUNT", + "TOTAL_TOKENS", + "TOTAL_COST", + "ERROR_RATE", + "STREAMING_RATE", + "LATENCY_P50", + "LATENCY_P99", + "MEDIAN_TOKENS", + "FIRST_TOKEN_P50", + "FIRST_TOKEN_P99", + "PROMPT_TOKENS", + "COMPLETION_TOKENS", + "PROMPT_COST", + "COMPLETION_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "THREAD_FEEDBACK_STATS" + ], + "x-enum-varnames": [ + "ThreadStatsSelectThreadCount", + "ThreadStatsSelectTraceCount", + "ThreadStatsSelectTotalTokens", + "ThreadStatsSelectTotalCost", + "ThreadStatsSelectErrorRate", + "ThreadStatsSelectStreamingRate", + "ThreadStatsSelectLatencyP50", + "ThreadStatsSelectLatencyP99", + "ThreadStatsSelectMedianTokens", + "ThreadStatsSelectFirstTokenP50", + "ThreadStatsSelectFirstTokenP99", + "ThreadStatsSelectPromptTokens", + "ThreadStatsSelectCompletionTokens", + "ThreadStatsSelectPromptCost", + "ThreadStatsSelectCompletionCost", + "ThreadStatsSelectPromptTokenDetails", + "ThreadStatsSelectCompletionTokenDetails", + "ThreadStatsSelectPromptCostDetails", + "ThreadStatsSelectCompletionCostDetails", + "ThreadStatsSelectThreadFeedbackStats" + ] + }, + "threads.ThreadTraceListItem": { "type": "object", "properties": { - "agent_id": { + "completion_cost": { + "description": "`completion_cost` is the estimated USD cost for the completion. Omitted unless included in `selects`.", + "type": "number" + }, + "completion_cost_details": { + "description": "`completion_cost_details` is the USD cost breakdown for completion-side categories; per-category values are under `raw`. Omitted unless included in `selects`.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunCompletionCostDetails" + } + ] + }, + "completion_token_details": { + "description": "`completion_token_details` is the completion-side token breakdown by category; per-category counts are under `raw`. Omitted unless included in `selects`.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunCompletionTokenDetails" + } + ] + }, + "completion_tokens": { + "description": "`completion_tokens` is the completion-side token count. Omitted unless included in `selects`.", + "type": "integer" + }, + "end_time": { + "description": "`end_time` is when the root run ended (RFC3339 date-time). JSON null if the run is still in progress. Omitted unless included in `selects`.", "type": "string", - "format": "uuid" + "format": "date-time", + "example": "2025-01-15T12:00:01.500Z" }, - "created_at": { + "error": { + "description": "`error` is the full root run error message when the run failed. Omitted unless included in `selects`.", "type": "string", - "format": "date-time" + "example": "context deadline exceeded" }, - "has_interrupts": { - "type": "boolean" + "error_preview": { + "description": "`error_preview` is a short error summary when the run failed. Omitted unless included in `selects`.", + "type": "string" }, - "id": { + "first_token_time": { + "description": "`first_token_time` is when the first output token was produced (RFC3339 date-time), for streamed runs when that metadata exists. Omitted unless included in `selects`.", "type": "string", - "format": "uuid" + "format": "date-time", + "example": "2024-01-15T10:30:00.312Z" }, - "metadata": { - "type": "object", - "additionalProperties": {} + "inputs": { + "description": "`inputs` is the full root run input payload. Omitted unless included in `selects`.", + "type": "object" }, - "state_updated_at": { - "type": "string", - "format": "date-time" + "inputs_preview": { + "description": "`inputs_preview` is a truncated text preview of inputs. Omitted unless included in `selects`.", + "type": "string" }, - "status": { - "type": "string", - "enum": [ - "idle", - "busy", - "interrupted", - "error" - ] + "latency": { + "description": "`latency` is wall-clock duration from start to end in seconds. Omitted unless included in `selects`.", + "type": "number" }, - "title": { + "name": { + "description": "`name` is a human-readable label for the root run (for example the model name, function name, or step name chosen when the run was traced). Omitted unless included in `selects`.", "type": "string" }, - "updated_at": { - "type": "string", - "format": "date-time" - } - } - }, - "threads.UpdateThreadMetadata": { - "type": "object", - "properties": { - "is_pinned": { - "$ref": "#/components/schemas/threads.OptionalField-bool" + "op": { + "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" }, - "is_test_run": { - "$ref": "#/components/schemas/threads.OptionalField-bool" + "outputs_preview": { + "description": "`outputs_preview` is a truncated text preview of outputs. Omitted unless included in `selects`.", + "type": "string" }, - "read_status": { - "$ref": "#/components/schemas/threads.OptionalField-bool" + "prompt_cost": { + "description": "`prompt_cost` is the estimated USD cost for the prompt. Omitted unless included in `selects`.", + "type": "number" }, - "sandbox_recreated_at": { - "format": "date-time", + "prompt_cost_details": { + "description": "`prompt_cost_details` is the USD cost breakdown for prompt-side categories; per-category values are under `raw`. Omitted unless included in `selects`.", + "allOf": [ + { + "$ref": "#/components/schemas/query.RunPromptCostDetails" + } + ] + }, + "prompt_token_details": { + "description": "`prompt_token_details` is the prompt-side token breakdown by category; per-category counts are under nested `raw`. Omitted unless included in `selects`.", "allOf": [ { - "$ref": "#/components/schemas/threads.OptionalField-string" + "$ref": "#/components/schemas/query.RunPromptTokenDetails" } ] }, - "skip_memory_write_protection": { - "$ref": "#/components/schemas/threads.OptionalField-bool" + "prompt_tokens": { + "description": "`prompt_tokens` is the prompt-side token count. Omitted unless included in `selects`.", + "type": "integer" + }, + "start_time": { + "description": "`start_time` is when the trace started (RFC3339 date-time). Omitted unless included in `selects`.", + "type": "string", + "format": "date-time", + "example": "2025-01-15T12:00:00.000Z" + }, + "thread_id": { + "description": "`thread_id` is the conversation thread UUID that contains this trace. Matches the `thread_id` path parameter of the request. Omitted unless included in `selects`.", + "type": "string", + "format": "uuid", + "example": "d4e5f6a7-b8c9-4d5e-1f2a-3b4c5d6e7f8a" + }, + "total_cost": { + "description": "`total_cost` is the estimated total USD cost for the root run. Omitted unless included in `selects`.", + "type": "number" + }, + "total_tokens": { + "description": "`total_tokens` is the total token count (prompt plus completion). Omitted unless included in `selects`.", + "type": "integer" + }, + "trace_id": { + "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" + }, + "turn_number": { + "description": "`turn_number` is the 1-based position in the whole thread, ordered by start_time then trace_id ascending, before filtering or pagination. Updates and deletions can change this position. Omitted unless TURN_NUMBER is included in `selects`.", + "type": "integer", + "minimum": 1, + "example": 1 } } }, - "threads.UpdateThreadRequest": { + "threads.ThreadTraceSelectField": { + "type": "string", + "enum": [ + "THREAD_ID", + "TRACE_ID", + "OP", + "PROMPT_TOKENS", + "COMPLETION_TOKENS", + "TOTAL_TOKENS", + "START_TIME", + "END_TIME", + "LATENCY", + "FIRST_TOKEN_TIME", + "INPUTS_PREVIEW", + "OUTPUTS_PREVIEW", + "INPUTS", + "OUTPUTS", + "ERROR", + "PROMPT_COST", + "COMPLETION_COST", + "TOTAL_COST", + "PROMPT_TOKEN_DETAILS", + "COMPLETION_TOKEN_DETAILS", + "PROMPT_COST_DETAILS", + "COMPLETION_COST_DETAILS", + "NAME", + "ERROR_PREVIEW", + "TURN_NUMBER" + ], + "x-enum-varnames": [ + "ThreadTraceSelectThreadID", + "ThreadTraceSelectTraceID", + "ThreadTraceSelectOp", + "ThreadTraceSelectPromptTokens", + "ThreadTraceSelectCompletionTokens", + "ThreadTraceSelectTotalTokens", + "ThreadTraceSelectStartTime", + "ThreadTraceSelectEndTime", + "ThreadTraceSelectLatency", + "ThreadTraceSelectFirstTokenTime", + "ThreadTraceSelectInputsPreview", + "ThreadTraceSelectOutputsPreview", + "ThreadTraceSelectInputs", + "ThreadTraceSelectOutputs", + "ThreadTraceSelectError", + "ThreadTraceSelectPromptCost", + "ThreadTraceSelectCompletionCost", + "ThreadTraceSelectTotalCost", + "ThreadTraceSelectPromptTokenDetails", + "ThreadTraceSelectCompletionTokenDetails", + "ThreadTraceSelectPromptCostDetails", + "ThreadTraceSelectCompletionCostDetails", + "ThreadTraceSelectName", + "ThreadTraceSelectErrorPreview", + "ThreadTraceSelectTurnNumber" + ] + }, + "threadshare.CreateShareTokenRequestBody": { "type": "object", + "required": [ + "project_id" + ], "properties": { - "metadata": { - "$ref": "#/components/schemas/threads.UpdateThreadMetadata" - }, - "title": { - "$ref": "#/components/schemas/threads.OptionalField-string" + "project_id": { + "description": "project_id is the tracing project UUID containing the thread.", + "type": "string", + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" } } }, - "threads.UpdateThreadResponse": { + "threadshare.ShareTokenResponseBody": { "type": "object", "properties": { - "agent_id": { - "type": "string", - "format": "uuid" - }, - "created_at": { + "share_token": { "type": "string", - "format": "date-time" - }, - "id": { + "format": "uuid", + "example": "018e4c7e-a9fb-7ef0-a5b6-6ea3a82e9327" + } + } + }, + "threadshare.ThreadManifest": { + "type": "object", + "required": [ + "session_id", + "session_name", + "thread_id" + ], + "properties": { + "session_id": { "type": "string", "format": "uuid" }, - "metadata": { - "$ref": "#/components/schemas/threads.UpdateThreadMetadata" - }, - "title": { + "session_name": { "type": "string" }, - "updated_at": { - "type": "string", - "format": "date-time" + "thread_id": { + "type": "string" } } }, @@ -81376,604 +90652,1577 @@ "name": { "type": "string" }, - "parameters": { - "type": "object", - "additionalProperties": true + "parameters": { + "type": "object", + "additionalProperties": true + }, + "returns": { + "type": "object", + "additionalProperties": true + } + } + }, + "tracer_session_issues_agent_webhooks.IssuesAgentWebhook": { + "type": "object", + "properties": { + "created_at": { + "type": "string" + }, + "destination_type": { + "type": "string", + "enum": [ + "webhook", + "jira", + "slack" + ] + }, + "event_types": { + "type": "array", + "items": { + "type": "string" + } + }, + "has_jira_token": { + "type": "boolean" + }, + "has_signing_secret": { + "type": "boolean" + }, + "has_unreadable_credentials": { + "description": "HasUnreadableCredentials marks a row retained in the settings list whose\nencrypted credential envelope could not be opened. No credential-derived\nfields are populated for such a row; it must be deleted and recreated.", + "type": "boolean" + }, + "header_names": { + "description": "HeaderNames lists configured header names for write-only clients.", + "type": "array", + "items": { + "type": "string" + } + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "id": { + "type": "string" + }, + "issue_statuses": { + "type": "array", + "items": { + "type": "string" + } + }, + "organization_id": { + "type": "string" + }, + "session_id": { + "type": "string" + }, + "severity_threshold": { + "$ref": "#/components/schemas/issues.Severity" + }, + "signing_secret": { + "description": "SigningSecret is present only in successful create, URL-conversion update,\nand roll responses.", + "type": "string" + }, + "slack_channel_id": { + "description": "Keep empty Slack fields in the response. The frontend uses an explicit\nempty string to distinguish URL destinations from Slack destinations.", + "type": "string" + }, + "slack_handoff": { + "description": "SlackHandoff is nil when no coding-agent hand-off is set on this destination.", + "anyOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/webhooks.SlackHandoffResponse" + } + ] + }, + { + "type": "null" + } + ] + }, + "slack_team_id": { + "type": "string" + }, + "tenant_id": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "url": { + "description": "URL and Headers are retained as always-empty fields so a client written\nagainst the pre-write-only contract still parses the response. Use\nURLDisplay and HeaderNames instead.", + "type": "string" + }, + "url_display": { + "description": "URLDisplay contains only the destination hostname.", + "type": "string" + } + } + }, + "tracer_sessions.AgentVersionResponse": { + "type": "object", + "properties": { + "commit_sha": { + "type": "string" + }, + "first_seen_at": { + "type": "string" + } + } + }, + "ttl_settings.TTLSettingsResponse": { + "type": "object", + "properties": { + "is_custom": { + "type": "boolean" + }, + "longlived_ttl_days": { + "type": "integer" }, - "returns": { - "type": "object", - "additionalProperties": true + "tenant_id": { + "type": "string" } } }, - "tracer_session_issues.ErrorResponse": { + "ttl_settings.UpdateTTLSettingsRequest": { "type": "object", "properties": { - "error": { - "type": "string" + "longlived_ttl_days": { + "type": "integer" } } }, - "tracer_session_issues.Issue": { + "usage.AgentUsagePage": { "type": "object", + "required": [ + "items", + "next_cursor" + ], "properties": { - "actions": { - "type": "object" + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/usage.PublicAgentUsage" + } }, - "created_at": { + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + } + }, + "usage.PublicAgentUsage": { + "type": "object", + "required": [ + "agent_id", + "first_used", + "last_used", + "run_count", + "total_cost" + ], + "properties": { + "agent_id": { "type": "string" }, - "description": { + "agent_name": { "type": "string" }, - "first_seen_at": { - "type": "string" + "first_used": { + "type": "string", + "format": "date-time" }, - "fix_branch": { - "type": "string" + "last_used": { + "type": "string", + "format": "date-time" }, - "fix_dispatched_at": { + "model_name": { "type": "string" }, - "fix_pr_number": { + "run_count": { "type": "integer" }, - "fix_prompt": { - "type": "string" + "total_cost": { + "description": "Estimated cost in USD from recorded traces.", + "type": "number" + } + } + }, + "usage.PublicUserUsage": { + "type": "object", + "required": [ + "agent_count", + "first_used", + "last_used", + "run_count", + "total_cost", + "user_email" + ], + "properties": { + "agent_count": { + "type": "integer" }, - "id": { - "type": "string" + "first_used": { + "type": "string", + "format": "date-time" }, - "last_seen_at": { - "type": "string" + "last_used": { + "type": "string", + "format": "date-time" }, - "name": { + "ls_user_id": { "type": "string" }, - "proposed_context_fixes": { - "type": "array", - "items": { - "type": "object" - } + "run_count": { + "type": "integer" }, - "proposed_examples": { - "type": "array", - "items": { - "type": "object" - } + "total_cost": { + "description": "Estimated cost in USD from recorded traces.", + "type": "number" }, - "proposed_fix": { + "user_email": { + "description": "Recorded user email used to group usage.", "type": "string" - }, - "proposed_prompt_fixes": { + } + } + }, + "usage.UserUsagePage": { + "type": "object", + "required": [ + "items", + "next_cursor" + ], + "properties": { + "items": { "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/usage.PublicUserUsage" } }, - "session_id": { + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + } + }, + "users.ErrorResponse": { + "type": "object", + "properties": { + "code": { "type": "string" }, - "severity": { - "$ref": "#/components/schemas/tracer_session_issues.Severity" - }, - "status": { - "$ref": "#/components/schemas/tracer_session_issues.Status" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "tenant_id": { + "detail": { "type": "string" }, - "traces": { - "type": "object" + "status": { + "type": "integer" }, - "updated_at": { + "type": { "type": "string" } } }, - "tracer_session_issues.ListViewsResponse": { + "users.ListResponse": { "type": "object", + "required": [ + "items", + "next_cursor" + ], "properties": { - "views": { + "items": { "type": "array", "items": { - "$ref": "#/components/schemas/tracer_session_issues.ViewedIssue" + "$ref": "#/components/schemas/users.User" } + }, + "next_cursor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] } } }, - "tracer_session_issues.Severity": { - "type": "integer", - "enum": [ - 0, - 1, - 2, - 3 - ], - "x-enum-varnames": [ - "SeverityUrgent", - "SeverityHigh", - "SeverityMed", - "SeverityLow" - ] - }, - "tracer_session_issues.Status": { - "type": "string", - "enum": [ - "open", - "completed", - "ignored" - ], - "x-enum-varnames": [ - "StatusOpen", - "StatusCompleted", - "StatusIgnored" - ] - }, - "tracer_session_issues.ViewedIssue": { + "users.User": { "type": "object", "properties": { - "issue_id": { - "type": "string" + "email": { + "type": "string", + "example": "ada@example.com" }, - "viewed_at": { - "type": "string" + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "example": "Ada Lovelace" } } }, - "tracer_session_issues_agent.CreateIssuesAgentRequest": { + "users.UserRef": { "type": "object", "properties": { - "context_hub_repo_handle": { - "type": "string" - }, - "github_base_branch": { - "type": "string" + "id": { + "type": "string", + "format": "uuid" }, - "github_repo_subdir": { + "name": { + "type": "string", + "example": "Ada Lovelace" + } + } + }, + "webhooks.SlackHandoffResponse": { + "type": "object", + "required": [ + "bot_user_id", + "message" + ], + "properties": { + "bot_user_id": { "type": "string" }, - "github_repo_url": { + "message": { + "description": "Message is the custom instruction after the mention; \"\" means the default\ntext (\"Investigate this issue and open a fix if needed.\").", "type": "string" - }, - "priorities": { - "type": "array", - "items": { - "type": "string" - } } } }, - "tracer_session_issues_agent.ErrorResponse": { - "type": "object", + "directory.LatestSelector": { + "additionalProperties": false, "properties": { - "error": { + "type": { + "enum": [ + "LATEST" + ], "type": "string" } - } + }, + "required": [ + "type" + ], + "type": "object" }, - "tracer_session_issues_agent.IssuesAgent": { - "type": "object", + "directory.CommitSelector": { + "additionalProperties": false, "properties": { - "agent_overview_accepted": { - "type": "boolean" - }, - "context_hub_repo_handle": { + "type": { + "enum": [ + "COMMIT" + ], "type": "string" }, - "created_at": { + "commit_id": { + "format": "uuid", "type": "string" + } + }, + "required": [ + "type", + "commit_id" + ], + "type": "object" + }, + "directory.DirectorySelector": { + "discriminator": { + "propertyName": "type", + "mapping": { + "LATEST": "#/components/schemas/directory.LatestSelector", + "COMMIT": "#/components/schemas/directory.CommitSelector" + } + }, + "oneOf": [ + { + "$ref": "#/components/schemas/directory.LatestSelector" }, - "cron_enabled": { - "type": "boolean" - }, - "cron_schedule": { + { + "$ref": "#/components/schemas/directory.CommitSelector" + } + ] + }, + "directory.AgentEntryInput": { + "additionalProperties": false, + "not": { + "required": [ + "selector", + "commit_id" + ] + }, + "properties": { + "type": { + "enum": [ + "agent" + ], "type": "string" }, - "github_base_branch": { + "repo_handle": { "type": "string" }, - "github_repo_subdir": { + "commit_id": { + "deprecated": true, + "description": "Deprecated write input. It is accepted for compatibility but ignored for selection, so the link resolves as LATEST. Omit it for LATEST or replace it with selector {\"type\": \"COMMIT\", \"commit_id\": \"\"} to pin a commit. commit_id and selector are mutually exclusive.", + "format": "uuid", "type": "string" }, - "github_repo_url": { + "selector": { + "$ref": "#/components/schemas/directory.DirectorySelector", + "description": "How to select the linked commit. Omit this field to use LATEST." + } + }, + "required": [ + "type", + "repo_handle" + ], + "type": "object" + }, + "directory.SkillEntryInput": { + "additionalProperties": false, + "not": { + "required": [ + "selector", + "commit_id" + ] + }, + "properties": { + "type": { + "enum": [ + "skill" + ], "type": "string" }, - "id": { + "repo_handle": { "type": "string" }, - "latest_run_id": { + "commit_id": { + "deprecated": true, + "description": "Deprecated write input. It is accepted for compatibility but ignored for selection, so the link resolves as LATEST. Omit it for LATEST or replace it with selector {\"type\": \"COMMIT\", \"commit_id\": \"\"} to pin a commit. commit_id and selector are mutually exclusive.", + "format": "uuid", "type": "string" }, - "latest_thread_id": { - "description": "IDs of the latest run on LangSmith Deployments; NULL until first trigger.", + "selector": { + "$ref": "#/components/schemas/directory.DirectorySelector", + "description": "How to select the linked commit. Omit this field to use LATEST." + } + }, + "required": [ + "type", + "repo_handle" + ], + "type": "object" + }, + "directory.FileEntry": { + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "file" + ], "type": "string" }, - "priorities": { - "type": "array", - "items": { - "type": "string" - } - }, - "session_agent_overview_repo_id": { + "content": { "type": "string" + } + }, + "required": [ + "type", + "content" + ], + "type": "object" + }, + "directory.DirectoryEntryInput": { + "discriminator": { + "propertyName": "type", + "mapping": { + "file": "#/components/schemas/directory.FileEntry", + "agent": "#/components/schemas/directory.AgentEntryInput", + "skill": "#/components/schemas/directory.SkillEntryInput" + } + }, + "oneOf": [ + { + "$ref": "#/components/schemas/directory.FileEntry" }, - "session_id": { - "type": "string" + { + "$ref": "#/components/schemas/directory.AgentEntryInput" }, - "session_name": { - "description": "JOINed from tracer_session", + { + "$ref": "#/components/schemas/directory.SkillEntryInput" + } + ] + }, + "directory.AgentEntryOutput": { + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "agent" + ], "type": "string" }, - "tenant_id": { + "repo_handle": { "type": "string" }, - "updated_at": { - "type": "string" - } - } - }, - "tracer_session_issues_agent.SaveOverviewRequest": { - "type": "object", - "properties": { - "content": { + "owner": { "type": "string" - } - } - }, - "tracer_session_issues_agent.SaveOverviewResponse": { - "type": "object", - "properties": { + }, "commit_hash": { "type": "string" }, - "session_agent_overview_repo_id": { - "type": "string" + "selector": { + "$ref": "#/components/schemas/directory.DirectorySelector", + "description": "The authored selection policy for this linked directory." } - } + }, + "required": [ + "type", + "repo_handle", + "owner", + "commit_hash" + ], + "type": "object" }, - "tracer_session_issues_agent.UpdateIssuesAgentRequest": { - "type": "object", + "directory.SkillEntryOutput": { + "additionalProperties": false, "properties": { - "agent_overview_accepted": { - "type": "boolean" - }, - "context_hub_repo_handle": { + "type": { + "enum": [ + "skill" + ], "type": "string" }, - "cron_enabled": { - "type": "boolean" - }, - "github_base_branch": { + "repo_handle": { "type": "string" }, - "github_repo_subdir": { + "owner": { "type": "string" }, - "github_repo_url": { + "commit_hash": { "type": "string" }, - "priorities": { - "type": "array", - "items": { - "type": "string" - } + "selector": { + "$ref": "#/components/schemas/directory.DirectorySelector", + "description": "The authored selection policy for this linked directory." + } + }, + "required": [ + "type", + "repo_handle", + "owner", + "commit_hash" + ], + "type": "object" + }, + "directory.DirectoryEntryOutput": { + "discriminator": { + "propertyName": "type", + "mapping": { + "file": "#/components/schemas/directory.FileEntry", + "agent": "#/components/schemas/directory.AgentEntryOutput", + "skill": "#/components/schemas/directory.SkillEntryOutput" + } + }, + "oneOf": [ + { + "$ref": "#/components/schemas/directory.FileEntry" }, - "session_agent_overview_repo_id": { - "type": "string" + { + "$ref": "#/components/schemas/directory.AgentEntryOutput" + }, + { + "$ref": "#/components/schemas/directory.SkillEntryOutput" } - } + ] }, - "tracer_session_issues_agent_webhooks.IssuesAgentWebhook": { + "sandboxapi.S3BucketMountSpec": { "type": "object", + "required": [ + "id", + "mount_path", + "type", + "s3" + ], "properties": { - "created_at": { - "type": "string" - }, - "event_types": { - "type": "array", - "items": { - "type": "string" - } + "cache": { + "$ref": "#/components/schemas/sandboxapi.MountCacheSpec" }, - "headers": { - "type": "object" + "encryption": { + "$ref": "#/components/schemas/sandboxapi.MountEncryptionSpec" }, "id": { - "type": "string" - }, - "session_id": { - "type": "string" - }, - "severity_threshold": { - "$ref": "#/components/schemas/tracer_session_issues.Severity" + "type": "string", + "maxLength": 64 }, - "signing_secret": { + "mount_path": { "type": "string" }, - "tenant_id": { - "type": "string" + "read_only": { + "type": "boolean" }, - "updated_at": { - "type": "string" + "s3": { + "$ref": "#/components/schemas/sandboxapi.S3MountSpec" }, - "url": { - "type": "string" + "type": { + "enum": [ + "s3" + ], + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.MountKind" + } + ] } + }, + "not": { + "anyOf": [ + { + "required": [ + "gcs" + ] + }, + { + "required": [ + "git" + ] + }, + { + "required": [ + "contexthub" + ] + }, + { + "required": [ + "azure_blob" + ] + } + ] } }, - "tracer_sessions.AgentVersionResponse": { + "sandboxapi.GCSBucketMountSpec": { "type": "object", + "required": [ + "id", + "mount_path", + "type", + "gcs" + ], "properties": { - "commit_sha": { - "type": "string" + "cache": { + "$ref": "#/components/schemas/sandboxapi.MountCacheSpec" }, - "first_seen_at": { + "gcs": { + "$ref": "#/components/schemas/sandboxapi.GCSMountSpec" + }, + "id": { + "type": "string", + "maxLength": 64 + }, + "mount_path": { "type": "string" + }, + "read_only": { + "type": "boolean" + }, + "type": { + "enum": [ + "gcs" + ], + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.MountKind" + } + ] } + }, + "not": { + "anyOf": [ + { + "required": [ + "s3" + ] + }, + { + "required": [ + "git" + ] + }, + { + "required": [ + "contexthub" + ] + }, + { + "required": [ + "azure_blob" + ] + }, + { + "required": [ + "encryption" + ] + } + ] } }, - "triggers.CreateTriggerRequest": { + "sandboxapi.GitRepoMountSpec": { "type": "object", + "required": [ + "id", + "mount_path", + "type", + "git" + ], "properties": { - "agent_id": { - "type": "string" - }, - "config": { - "type": "object", - "additionalProperties": {} + "git": { + "$ref": "#/components/schemas/sandboxapi.GitMountSpec" }, - "name": { - "type": "string" + "id": { + "type": "string", + "maxLength": 64 }, - "registration_id": { + "mount_path": { "type": "string" }, - "status": { - "type": "string" + "read_only": { + "type": "boolean" }, - "template_id": { - "type": "string" + "type": { + "enum": [ + "git" + ], + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.MountKind" + } + ] } + }, + "not": { + "anyOf": [ + { + "required": [ + "s3" + ] + }, + { + "required": [ + "gcs" + ] + }, + { + "required": [ + "contexthub" + ] + }, + { + "required": [ + "azure_blob" + ] + }, + { + "required": [ + "cache" + ] + }, + { + "required": [ + "encryption" + ] + } + ] } }, - "triggers.ErrorResponse": { + "sandboxapi.ContextHubRepoMountSpec": { "type": "object", + "required": [ + "id", + "mount_path", + "type", + "contexthub" + ], "properties": { - "code": { - "type": "string" + "contexthub": { + "$ref": "#/components/schemas/sandboxapi.ContextHubMountSpec" }, - "detail": { + "id": { + "type": "string", + "maxLength": 64 + }, + "mount_path": { "type": "string" }, - "status": { - "type": "integer" + "read_only": { + "type": "boolean" }, "type": { - "type": "string" + "enum": [ + "contexthub" + ], + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.MountKind" + } + ] } + }, + "not": { + "anyOf": [ + { + "required": [ + "s3" + ] + }, + { + "required": [ + "gcs" + ] + }, + { + "required": [ + "git" + ] + }, + { + "required": [ + "azure_blob" + ] + }, + { + "required": [ + "cache" + ] + }, + { + "required": [ + "encryption" + ] + } + ] } }, - "triggers.Trigger": { + "sandboxapi.AzureBlobContainerMountSpec": { "type": "object", + "required": [ + "id", + "mount_path", + "type", + "azure_blob" + ], "properties": { - "agent_id": { - "type": "string" + "azure_blob": { + "$ref": "#/components/schemas/sandboxapi.AzureBlobMountSpec" }, - "config": { - "type": "object", - "additionalProperties": {} - }, - "created_at": { - "type": "string" + "cache": { + "$ref": "#/components/schemas/sandboxapi.MountCacheSpec" }, "id": { - "type": "string" - }, - "name": { - "type": "string" + "type": "string", + "maxLength": 64 }, - "status": { + "mount_path": { "type": "string" }, - "template_id": { - "type": "string" + "read_only": { + "type": "boolean" }, - "updated_at": { - "type": "string" + "type": { + "enum": [ + "azure_blob" + ], + "allOf": [ + { + "$ref": "#/components/schemas/sandboxapi.MountKind" + } + ] } + }, + "not": { + "anyOf": [ + { + "required": [ + "s3" + ] + }, + { + "required": [ + "gcs" + ] + }, + { + "required": [ + "git" + ] + }, + { + "required": [ + "contexthub" + ] + }, + { + "required": [ + "encryption" + ] + } + ] } }, - "triggers.TriggerListResponse": { + "sandboxes.ProxyAWSRoleConfig": { "type": "object", "properties": { - "items": { - "type": "array", - "items": { - "$ref": "#/components/schemas/triggers.Trigger" - } + "role_arn": { + "description": "IAM role to assume with AssumeRoleWithWebIdentity, using a short-lived OIDC token LangSmith signs for this workspace. The role's trust policy must trust LangSmith's issuer for the token subject. Credentials renew automatically, and access follows the role's effective AWS permissions. Mutually exclusive with static keys, and cannot be changed after creation.", + "type": "string", + "minLength": 1 }, - "next_cursor": { - "type": "string" + "subject_scope": { + "description": "SubjectScope picks the token subject the role trusts: \"workspace\" (the default) or \"tag:\", which must be one of the sandbox's tag_value_ids. Only valid with role_arn.", + "type": "string", + "pattern": "^(workspace|tag:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$" } + }, + "required": [ + "role_arn" + ], + "not": { + "anyOf": [ + { + "required": [ + "access_key_id" + ] + }, + { + "required": [ + "secret_access_key" + ] + } + ] } }, - "triggers.UpdateTriggerRequest": { + "sandboxes.ProxyAWSStaticConfig": { "type": "object", "properties": { - "config": { - "type": "object", - "additionalProperties": {} + "access_key_id": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" }, - "name": { - "type": "string" + "role_arn": { + "description": "IAM role to assume with AssumeRoleWithWebIdentity, using a short-lived OIDC token LangSmith signs for this workspace. The role's trust policy must trust LangSmith's issuer for the token subject. Credentials renew automatically, and access follows the role's effective AWS permissions. Mutually exclusive with static keys, and cannot be changed after creation.", + "type": "string", + "enum": [ + "" + ] }, - "status": { - "type": "string" + "secret_access_key": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" } + }, + "required": [ + "access_key_id", + "secret_access_key" + ], + "not": { + "anyOf": [ + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } + } + ] } }, - "ttl_settings.TTLSettingsResponse": { + "sandboxes.SandboxAWSMountRoleAuthConfig": { "type": "object", "properties": { - "is_custom": { - "type": "boolean" - }, - "longlived_ttl_days": { - "type": "integer" + "role_arn": { + "description": "IAM role to assume with AssumeRoleWithWebIdentity, using a short-lived OIDC token LangSmith signs for this workspace; the role's trust policy must trust LangSmith's issuer for the token subject. LangSmith scopes the credentials to the configured S3 mounts. Mutually exclusive with static credentials, and cannot be changed after creation.", + "type": "string", + "minLength": 1 }, - "tenant_id": { - "type": "string" + "subject_scope": { + "description": "SubjectScope picks the token subject the role trusts: \"workspace\" (the default) or \"tag:\", which must be one of the sandbox's tag_value_ids. Only valid with role_arn.", + "type": "string", + "pattern": "^(workspace|tag:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$" } - } + }, + "required": [ + "role_arn" + ], + "additionalProperties": false }, - "ttl_settings.UpdateTTLSettingsRequest": { + "sandboxes.SandboxAWSMountStaticAuthConfig": { "type": "object", "properties": { - "longlived_ttl_days": { - "type": "integer" + "access_key_id": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" + }, + "role_arn": { + "description": "IAM role to assume with AssumeRoleWithWebIdentity, using a short-lived OIDC token LangSmith signs for this workspace; the role's trust policy must trust LangSmith's issuer for the token subject. LangSmith scopes the credentials to the configured S3 mounts. Mutually exclusive with static credentials, and cannot be changed after creation.", + "type": "string", + "enum": [ + "" + ] + }, + "secret_access_key": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" } + }, + "required": [ + "access_key_id", + "secret_access_key" + ], + "not": { + "anyOf": [ + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } + } + ] } }, - "usage.AgentUsage": { + "sandboxes.ProxyAzureWorkloadIdentityConfig": { "type": "object", "properties": { - "agent_name": { - "type": "string" - }, - "assistant_id": { - "type": "string" - }, - "first_used": { - "type": "string" - }, - "last_used": { - "type": "string" - }, - "model_name": { - "type": "string" + "tenant_id": { + "description": "TenantID is the Entra tenant (directory) ID, a GUID. Setting it selects workload identity: LangSmith signs an OIDC token for this workspace and exchanges it at Entra ID for access tokens of client_id, so no secret is stored. Cannot be changed after creation.", + "type": "string", + "minLength": 1, + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" }, - "owner_email": { - "type": "string" + "client_id": { + "description": "ClientID is the application (client) ID, a GUID, of the app registration or user-assigned managed identity whose federated identity credential trusts LangSmith's issuer. Required with tenant_id.", + "type": "string", + "minLength": 1, + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" }, - "run_count": { - "type": "integer" + "subject_scope": { + "description": "SubjectScope picks the token subject the federated credential trusts: \"workspace\" (the default) or \"tag:\", which must be one of the sandbox's tag_value_ids. Only valid with tenant_id.", + "type": "string", + "pattern": "^(workspace|tag:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$" }, - "total_cost": { - "type": "number" + "resources": { + "description": "Resources narrows the Entra resources access tokens are obtained for, from https://storage.azure.com, https://vault.azure.net, https://management.azure.com and https://cognitiveservices.azure.com. Defaults to all of them. Only valid with tenant_id.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "https://storage.azure.com", + "https://vault.azure.net", + "https://management.azure.com", + "https://cognitiveservices.azure.com" + ] + }, + "uniqueItems": true } + }, + "required": [ + "tenant_id", + "client_id" + ], + "not": { + "anyOf": [ + { + "required": [ + "account_key" + ] + }, + { + "required": [ + "sas_token" + ] + }, + { + "required": [ + "storage_account" + ] + } + ] } }, - "usage.AgentUsageResponse": { + "sandboxes.ProxyAzureAccountKeyConfig": { "type": "object", "properties": { - "agents": { - "type": "array", - "items": { - "$ref": "#/components/schemas/usage.AgentUsage" - } + "storage_account": { + "minLength": 3, + "description": "StorageAccount is the storage account static credentials authenticate to: requests to its blob, dfs, queue, table and file endpoints. Requires exactly one of account_key (requests are signed with SharedKey) or sas_token (appended to each request).", + "type": "string", + "maxLength": 24, + "pattern": "^[a-z0-9]+$" + }, + "account_key": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" } + }, + "required": [ + "storage_account", + "account_key" + ], + "not": { + "anyOf": [ + { + "required": [ + "sas_token" + ] + }, + { + "required": [ + "tenant_id" + ], + "properties": { + "tenant_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "client_id" + ], + "properties": { + "client_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } + }, + { + "required": [ + "resources" + ], + "properties": { + "resources": { + "minItems": 1 + } + } + } + ] } }, - "usage.ModelUsage": { + "sandboxes.ProxyAzureSASConfig": { "type": "object", "properties": { - "last_used": { - "type": "string" + "storage_account": { + "minLength": 3, + "description": "StorageAccount is the storage account static credentials authenticate to: requests to its blob, dfs, queue, table and file endpoints. Requires exactly one of account_key (requests are signed with SharedKey) or sas_token (appended to each request).", + "type": "string", + "maxLength": 24, + "pattern": "^[a-z0-9]+$" }, - "model_name": { - "type": "string" + "sas_token": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" + } + }, + "required": [ + "storage_account", + "sas_token" + ], + "not": { + "anyOf": [ + { + "required": [ + "account_key" + ] + }, + { + "required": [ + "tenant_id" + ], + "properties": { + "tenant_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "client_id" + ], + "properties": { + "client_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } + }, + { + "required": [ + "resources" + ], + "properties": { + "resources": { + "minItems": 1 + } + } + } + ] + } + }, + "sandboxes.SandboxAzureMountWorkloadIdentityAuthConfig": { + "type": "object", + "properties": { + "tenant_id": { + "description": "TenantID is the Entra tenant (directory) ID, a GUID. Setting it selects workload identity: LangSmith signs an OIDC token for this workspace and exchanges it at Entra ID for storage access tokens of client_id. Cannot be changed after creation.", + "type": "string", + "minLength": 1, + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" }, - "run_count": { - "type": "integer" + "client_id": { + "description": "ClientID is the application (client) ID, a GUID, of the app registration or user-assigned managed identity whose federated identity credential trusts LangSmith's issuer. Required with tenant_id.", + "type": "string", + "minLength": 1, + "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" }, - "total_cost": { - "type": "number" + "subject_scope": { + "description": "SubjectScope picks the token subject the federated credential trusts: \"workspace\" (the default) or \"tag:\", which must be one of the sandbox's tag_value_ids. Only valid with tenant_id.", + "type": "string", + "pattern": "^(workspace|tag:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$" } + }, + "required": [ + "tenant_id", + "client_id" + ], + "not": { + "anyOf": [ + { + "required": [ + "account_key" + ] + }, + { + "required": [ + "sas_token" + ] + } + ] } }, - "usage.ModelUsageResponse": { + "sandboxes.SandboxAzureMountAccountKeyAuthConfig": { "type": "object", "properties": { - "models": { - "type": "array", - "items": { - "$ref": "#/components/schemas/usage.ModelUsage" + "account_key": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" + } + }, + "required": [ + "account_key" + ], + "not": { + "anyOf": [ + { + "required": [ + "sas_token" + ] + }, + { + "required": [ + "tenant_id" + ], + "properties": { + "tenant_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "client_id" + ], + "properties": { + "client_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } } + ] + } + }, + "sandboxes.SandboxAzureMountSASAuthConfig": { + "type": "object", + "properties": { + "sas_token": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" } + }, + "required": [ + "sas_token" + ], + "not": { + "anyOf": [ + { + "required": [ + "account_key" + ] + }, + { + "required": [ + "tenant_id" + ], + "properties": { + "tenant_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "client_id" + ], + "properties": { + "client_id": { + "minLength": 1 + } + } + }, + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } + } + ] } }, - "usage.ToolUsage": { + "sandboxes.ProxyGCPWorkloadIdentityConfig": { "type": "object", "properties": { - "agent_count": { - "type": "integer" - }, - "avg_latency_ms": { - "type": "number" + "workload_identity_provider": { + "description": "WorkloadIdentityProvider federates an OIDC token LangSmith signs for this workspace through Workload Identity Federation instead of a service account key. Use the full resource name: //iam.googleapis.com/projects//locations/global/workloadIdentityPools//providers/. Cannot be changed after creation.", + "type": "string", + "minLength": 1 }, - "last_used": { + "service_account_email": { + "description": "ServiceAccountEmail is the service account to impersonate with the federated token. Omit it to use the federated principal directly.", "type": "string" }, - "run_count": { - "type": "integer" + "subject_scope": { + "description": "SubjectScope picks the token subject the provider trusts: \"workspace\" (the default) or \"tag:\", which must be one of the sandbox's tag_value_ids. Only valid with workload_identity_provider.", + "type": "string", + "pattern": "^(workspace|tag:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$" }, - "tool_name": { - "type": "string" + "scopes": { + "description": "Scopes are the OAuth scopes requested for the access token. Omit them to use https://www.googleapis.com/auth/cloud-platform.", + "type": "array", + "items": { + "type": "string" + } } + }, + "required": [ + "workload_identity_provider" + ], + "not": { + "required": [ + "service_account_json" + ] } }, - "usage.ToolUsageResponse": { + "sandboxes.ProxyGCPServiceAccountConfig": { "type": "object", "properties": { - "tools": { + "service_account_json": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" + }, + "scopes": { + "description": "Scopes are the OAuth scopes requested for the access token. Omit them to use https://www.googleapis.com/auth/cloud-platform.", "type": "array", "items": { - "$ref": "#/components/schemas/usage.ToolUsage" + "type": "string" } } + }, + "required": [ + "service_account_json" + ], + "not": { + "anyOf": [ + { + "required": [ + "workload_identity_provider" + ], + "properties": { + "workload_identity_provider": { + "minLength": 1 + } + } + }, + { + "required": [ + "service_account_email" + ], + "properties": { + "service_account_email": { + "minLength": 1 + } + } + }, + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } + } + ] } }, - "usage.UserUsage": { + "sandboxes.SandboxGCPMountWorkloadIdentityAuthConfig": { "type": "object", "properties": { - "agent_count": { - "type": "integer" - }, - "first_used": { - "type": "string" - }, - "last_used": { - "type": "string" - }, - "ls_user_id": { - "type": "string" + "workload_identity_provider": { + "description": "WorkloadIdentityProvider federates an OIDC token LangSmith signs for this workspace through Workload Identity Federation instead of a service account key: //iam.googleapis.com/projects//locations/global/workloadIdentityPools//providers/. Mutually exclusive with service_account_json. Cannot be changed after creation.", + "type": "string", + "minLength": 1 }, - "owner_email": { + "service_account_email": { + "description": "ServiceAccountEmail is the service account to impersonate with the federated token. Omit it to use the federated principal directly. Only valid with workload_identity_provider.", "type": "string" }, - "run_count": { - "type": "integer" - }, - "total_cost": { - "type": "number" + "subject_scope": { + "description": "SubjectScope picks the token subject the provider trusts: \"workspace\" (the default) or \"tag:\", which must be one of the sandbox's tag_value_ids. Only valid with workload_identity_provider.", + "type": "string", + "pattern": "^(workspace|tag:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$" } + }, + "required": [ + "workload_identity_provider" + ], + "not": { + "required": [ + "service_account_json" + ] } }, - "usage.UserUsageResponse": { + "sandboxes.SandboxGCPMountServiceAccountAuthConfig": { "type": "object", "properties": { - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/usage.UserUsage" + "service_account_json": { + "$ref": "#/components/schemas/sandboxes.ProxySecretValue" + } + }, + "required": [ + "service_account_json" + ], + "not": { + "anyOf": [ + { + "required": [ + "workload_identity_provider" + ], + "properties": { + "workload_identity_provider": { + "minLength": 1 + } + } + }, + { + "required": [ + "service_account_email" + ], + "properties": { + "service_account_email": { + "minLength": 1 + } + } + }, + { + "required": [ + "subject_scope" + ], + "properties": { + "subject_scope": { + "minLength": 1 + } + } } + ] + } + }, + "shared.SSEEvent": { + "type": "object", + "description": "One parsed event from a v2 query Server-Sent Events response.", + "required": [ + "event", + "data" + ], + "properties": { + "event": { + "type": "string", + "description": "The event name.", + "enum": [ + "data", + "end", + "error" + ] + }, + "data": { + "type": "string", + "description": "For data events, a JSON-encoded array of RFC 6902 patch operations; for end events, an empty string; for error events, a JSON-encoded ProblemDetails object." } } } @@ -82252,81 +92501,30 @@ "x-group": "System" }, { - "name": "agents", - "x-hidden": true - }, - { - "name": "beacon", - "x-hidden": true - }, - { - "name": "engine-trial" - }, - { - "name": "fleet" - }, - { - "name": "fleet auth", - "x-hidden": true - }, - { - "name": "fleet credentials", - "x-hidden": true + "name": "threads", + "x-group": "System" }, { - "name": "fleet github-app", - "x-hidden": true + "name": "fleet orgs" }, { - "name": "fleet integrations", - "x-hidden": true + "name": "fleet secrets" }, { - "name": "fleet mcp", - "x-hidden": true + "name": "fleet tenants" }, { "name": "fleet threads", "x-hidden": true }, { - "name": "fleet trigger-templates", - "x-hidden": true - }, - { - "name": "fleet triggers", - "x-hidden": true - }, - { - "name": "fleet usage", - "x-hidden": true - }, - { - "name": "fleet_webhooks", - "x-hidden": true - }, - { - "name": "health" - }, - { - "name": "internal", - "x-hidden": true - }, - { - "name": "metrics", - "x-hidden": true - }, - { - "name": "nps", - "x-hidden": true + "name": "fleet users" }, { - "name": "sandboxes-internal", - "x-hidden": true + "name": "productfeedback" }, { - "name": "skills", - "x-hidden": true + "name": "usage" } ] }