{"openapi":"3.1.0","info":{"title":"LangSmith Deployment Control Plane API","description":"The LangSmith Deployment Control Plane API is used to programmatically create and manage\nAgent Server deployments. For example, the APIs can be orchestrated to\ncreate custom CI/CD workflows.\n\n## Host\nhttps://api.host.langchain.com\n\n## Authentication\nTo authenticate with the LangSmith Deployment Control Plane API, set the `X-Api-Key` header\nto a valid [LangSmith API key](https://docs.langchain.com/langsmith/create-account-api-key#create-an-api-key).\n\n## Versioning\nEach endpoint path is prefixed with a version (e.g. `v1`, `v2`).\n\n## Quick Start\n1. Call `POST /v2/deployments` to create a new Deployment. The response body contains the Deployment ID (`id`) and the ID of the latest (and first) revision (`latest_revision_id`).\n1. Call `GET /v2/deployments/{deployment_id}` to retrieve the Deployment. Set `deployment_id` in the URL to the value of Deployment ID (`id`).\n1. Poll for revision `status` until `status` is `DEPLOYED` by calling `GET /v2/deployments/{deployment_id}/revisions/{latest_revision_id}`.\n1. Call `PATCH /v2/deployments/{deployment_id}` to update the deployment.\n","version":"0.1.0"},"paths":{"/v1/integrations/github/install":{"get":{"tags":["Integrations (v1)"],"summary":"List GitHub Integrations","description":"List available GitHub integrations for LangGraph Platfom Cloud SaaS.","operationId":"list_github_integrations_v1_integrations_github_install_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GithubIntegration"},"type":"array","title":"Response List Github Integrations V1 Integrations Github Install Get"}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]}},"/v1/integrations/github/{integration_id}/repos":{"get":{"tags":["Integrations (v1)"],"summary":"List GitHub Repositories","description":"List available GitHub repositories for an integration that are available to deploy to LangSmith Deployment.","operationId":"list_github_repositories_v1_integrations_github__integration_id__repos_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration ID","description":"GitHub integration ID."},"description":"GitHub integration ID."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GithubRepository"},"title":"Response List Github Repositories V1 Integrations Github Integration Id Repos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/integrations/forge/github/install":{"get":{"tags":["Integrations (v1)"],"summary":"List Forge GitHub Integrations","description":"List available Forge GitHub integrations.","operationId":"list_forge_github_integrations_v1_integrations_forge_github_install_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GithubIntegration"},"type":"array","title":"Response List Forge Github Integrations V1 Integrations Forge Github Install Get"}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]}},"/v1/integrations/forge/github/{integration_id}/repos":{"get":{"tags":["Integrations (v1)"],"summary":"List Forge GitHub Repositories","description":"List available GitHub repositories for a Forge integration.","operationId":"list_forge_github_repositories_v1_integrations_forge_github__integration_id__repos_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"integration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Integration ID","description":"Forge GitHub integration ID."},"description":"Forge GitHub integration ID."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GithubRepository"},"title":"Response List Forge Github Repositories V1 Integrations Forge Github Integration Id Repos Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/deployments":{"get":{"tags":["Deployments (v2)"],"summary":"List Deployments","description":"List all deployments.","operationId":"list_deployments_v2_deployments_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of resources to return.","default":20,"title":"Limit"},"description":"Maximum number of resources to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset. Pass this value to subsequent requests to fetch the next page of resources.","default":0,"title":"Offset"},"description":"Pagination offset. Pass this value to subsequent requests to fetch the next page of resources."},{"name":"name_contains","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the deployment to filter by.","title":"Name Contains"},"description":"Name of the deployment to filter by."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`status` of the deployment to filter by.","title":"Status"},"description":"`status` of the deployment to filter by."},{"name":"remote_reconciled","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Flag to filter by remote reconciled deployments.","title":"Remote Reconciled"},"description":"Flag to filter by remote reconciled deployments."},{"name":"tag_value_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma separated list of tag value IDs of the deployment to filter by.","title":"Tag Value Ids"},"description":"Comma separated list of tag value IDs of the deployment to filter by."},{"name":"image_version","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Image version to filter by.","title":"Image Version"},"description":"Image version to filter by."},{"name":"deployment_type","in":"query","required":false,"schema":{"anyOf":[{"enum":["dev_free","dev","prod"],"type":"string"},{"type":"null"}],"description":"Deployment type to filter by.","title":"Deployment Type"},"description":"Deployment type to filter by."},{"name":"deployment_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma separated list of deployment IDs to filter by.","title":"Deployment Ids"},"description":"Comma separated list of deployment IDs to filter by."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentsList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Deployments (v2)"],"summary":"Create Deployment","description":"Create a new deployment.","operationId":"create_deployment_v2_deployments_post","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"400":{"description":"Bad Request","content":{"application/json":{"example":{"detail":"Error description."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Deployments (v2)"],"summary":"Delete Deployments","description":"Delete multiple deployments with partial success support.\n\nReturns:\n - 200: All deployments deleted successfully\n - 207: Some deployments deleted successfully, some failed","operationId":"delete_deployments_v2_deployments_delete","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"deployment_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string","format":"uuid"},"maxItems":100,"title":"Deployment Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Deployment ID {deployment_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/deployments/{deployment_id}":{"get":{"tags":["Deployments (v2)"],"summary":"Get Deployment","description":"Get a deployment by ID.","operationId":"get_deployment_v2_deployments__deployment_id__get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deployment ID"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Deployment ID {deployment_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Deployments (v2)"],"summary":"Patch Deployment","description":"Patch a deployment by ID.","operationId":"patch_deployment_v2_deployments__deployment_id__patch","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deployment ID"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentPatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Deployment ID {deployment_id} not found."}}}},"400":{"description":"Bad Request","content":{"application/json":{"example":{"detail":"Error description."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Deployments (v2)"],"summary":"Delete Deployment","description":"Delete a deployment by ID.","operationId":"delete_deployment_v2_deployments__deployment_id__delete","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deployment ID"}},{"name":"delete_tracing_project","in":"query","required":false,"schema":{"type":"boolean","description":"Optionally delete tracing project for the deployment.","default":false,"title":"Delete Tracing Project"},"description":"Optionally delete tracing project for the deployment."}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Deployment ID {deployment_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/deployments/{deployment_id}/revisions":{"get":{"tags":["Deployments (v2)"],"summary":"List Revisions","description":"List all revisions for a deployment.","operationId":"list_revisions_v2_deployments__deployment_id__revisions_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deployment ID"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of resources to return.","default":20,"title":"Limit"},"description":"Maximum number of resources to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset. Pass this value to subsequent requests to fetch the next page of resources.","default":0,"title":"Offset"},"description":"Pagination offset. Pass this value to subsequent requests to fetch the next page of resources."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma separated list of revision `status` (CREATING, QUEUED, AWAITING_BUILD, BUILDING, AWAITING_DEPLOY, DEPLOYING, CREATE_FAILED, BUILD_FAILED, DEPLOY_FAILED, DEPLOYED, SKIPPED, INTERRUPTED, UNKNOWN) fields to filter by.","title":"Status"},"description":"Comma separated list of revision `status` (CREATING, QUEUED, AWAITING_BUILD, BUILDING, AWAITING_DEPLOY, DEPLOYING, CREATE_FAILED, BUILD_FAILED, DEPLOY_FAILED, DEPLOYED, SKIPPED, INTERRUPTED, UNKNOWN) fields to filter by."},{"name":"remote_reconciled","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Flag to filter by remote reconciled revisions.","title":"Remote Reconciled"},"description":"Flag to filter by remote reconciled revisions."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevisionsList"}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Deployment ID {deployment_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/deployments/{deployment_id}/revisions/{revision_id}":{"get":{"tags":["Deployments (v2)"],"summary":"Get Revision","description":"Get a revision by ID for a deployment.","operationId":"get_revision_v2_deployments__deployment_id__revisions__revision_id__get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deployment ID"}},{"name":"revision_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Revision ID"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Revision"}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Deployment ID {deployment_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/deployments/{deployment_id}/revisions/{revision_id}/redeploy":{"post":{"tags":["Deployments (v2)"],"summary":"Redeploy Revision","description":"Redeploy a specific revision ID.","operationId":"redeploy_revision_v2_deployments__deployment_id__revisions__revision_id__redeploy_post","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"deployment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Deployment ID"}},{"name":"revision_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Revision ID"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Deployment ID {deployment_id} not found."}}}},"400":{"description":"Bad Request","content":{"application/json":{"example":{"detail":"Error description."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/listeners":{"get":{"tags":["Listeners (v2)"],"summary":"List Listeners","description":"List all listeners.","operationId":"list_listeners_v2_listeners_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum number of resources to return.","default":20,"title":"Limit"},"description":"Maximum number of resources to return."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset. Pass this value to subsequent requests to fetch the next page of resources.","default":0,"title":"Offset"},"description":"Pagination offset. Pass this value to subsequent requests to fetch the next page of resources."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenersList"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Listeners (v2)"],"summary":"Create Listener","description":"Create a listener.
\n
\nCreating a listener is only allowed for LangSmith organizations with self-hosted enterprise plans.","operationId":"create_listener_v2_listeners_post","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenerCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Listener"}}}},"403":{"description":"Forbidden","content":{"application/json":{"example":{"detail":"Listeners cannot be created for LangSmith workspace ID '{workspace_id}'. Creating listeners is only allowed for LangSmith organizations with self-hosted enterprise plans."}}}},"409":{"description":"Conflict","content":{"application/json":{"example":{"detail":"Listener for LangSmith workspace ID '{workspace_id}' and compute ID '{compute_id}' already exists."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/listeners/{listener_id}":{"get":{"tags":["Listeners (v2)"],"summary":"Get Listener","description":"Get a listener by ID.","operationId":"get_listener_v2_listeners__listener_id__get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"listener_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Listener ID"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Listener"}}}},"403":{"description":"Forbidden","content":{"application/json":{"example":{"detail":"Listeners cannot be created for LangSmith workspace ID '{workspace_id}'. Creating listeners is only allowed for LangSmith organizations with self-hosted enterprise plans."}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Listener ID {listener_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Listeners (v2)"],"summary":"Patch Listener","description":"Patch a listener by ID.","operationId":"patch_listener_v2_listeners__listener_id__patch","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"listener_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Listener ID"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListenerPatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Listener"}}}},"403":{"description":"Forbidden","content":{"application/json":{"example":{"detail":"Listeners cannot be created for LangSmith workspace ID '{workspace_id}'. Creating listeners is only allowed for LangSmith organizations with self-hosted enterprise plans."}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Listener ID {listener_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Listeners (v2)"],"summary":"Delete Listener","description":"Delete a listener by ID.","operationId":"delete_listener_v2_listeners__listener_id__delete","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"listener_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Listener ID"}}],"responses":{"204":{"description":"Successful Response"},"403":{"description":"Forbidden","content":{"application/json":{"example":{"detail":"Listeners cannot be created for LangSmith workspace ID '{workspace_id}'. Creating listeners is only allowed for LangSmith organizations with self-hosted enterprise plans."}}}},"404":{"description":"Not Found","content":{"application/json":{"example":{"detail":"Listener ID {listener_id} not found."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/providers":{"get":{"tags":["Auth Service (v2)"],"summary":"List Oauth Providers","description":"List OAuth providers.","operationId":"list_oauth_providers_v2_auth_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OAuthProviderResponse"},"type":"array","title":"Response List Oauth Providers V2 Auth Providers Get"}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]},"post":{"tags":["Auth Service (v2)"],"summary":"Create Oauth Provider","description":"Create a new OAuth provider manually.","operationId":"create_oauth_provider_v2_auth_providers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthProviderCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]}},"/v2/auth/setup/{provider_id}":{"get":{"tags":["Auth Service (v2)"],"summary":"Oauth Setup Callback","description":"Handle OAuth setup callback redirect from GitHub Apps.\n\nThis endpoint handles the \"Setup URL\" callback from GitHub Apps, which is\ntriggered when a user installs or updates their GitHub App installation.\n\nFor \"update\" actions (user modified repo access via GitHub), we just show\na success page since no token exchange is needed.\n\nFor new installations with code/state, we process similar to the regular\nOAuth callback.","operationId":"oauth_setup_callback_v2_auth_setup__provider_id__get","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"code","in":"query","required":false,"schema":{"type":"string","description":"Authorization code from OAuth provider","title":"Code"},"description":"Authorization code from OAuth provider"},{"name":"state","in":"query","required":false,"schema":{"type":"string","description":"State parameter containing auth_id","title":"State"},"description":"State parameter containing auth_id"},{"name":"setup_action","in":"query","required":false,"schema":{"type":"string","description":"Setup action from GitHub App","title":"Setup Action"},"description":"Setup action from GitHub App"},{"name":"installation_id","in":"query","required":false,"schema":{"type":"integer","description":"GitHub App installation ID","title":"Installation Id"},"description":"GitHub App installation ID"},{"name":"error","in":"query","required":false,"schema":{"type":"string","description":"Error code from OAuth provider","title":"Error"},"description":"Error code from OAuth provider"},{"name":"error_description","in":"query","required":false,"schema":{"type":"string","description":"Error description from OAuth provider","title":"Error Description"},"description":"Error description from OAuth provider"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/callback/{provider_id}":{"get":{"tags":["Auth Service (v2)"],"summary":"Oauth Callback Get","description":"Handle OAuth callback redirect from OAuth providers.\n\nProcesses the OAuth token exchange, then redirects to the frontend callback\npage for a consistent UI experience.","operationId":"oauth_callback_get_v2_auth_callback__provider_id__get","security":[{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"code","in":"query","required":false,"schema":{"type":"string","description":"Authorization code from OAuth provider","title":"Code"},"description":"Authorization code from OAuth provider"},{"name":"state","in":"query","required":false,"schema":{"type":"string","description":"State parameter containing auth_id","title":"State"},"description":"State parameter containing auth_id"},{"name":"error","in":"query","required":false,"schema":{"type":"string","description":"Error code from OAuth provider","title":"Error"},"description":"Error code from OAuth provider"},{"name":"error_description","in":"query","required":false,"schema":{"type":"string","description":"Error description from OAuth provider","title":"Error Description"},"description":"Error description from OAuth provider"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Auth Service (v2)"],"summary":"Oauth Callback","operationId":"oauth_callback_v2_auth_callback__provider_id__post","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthFinalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/authenticate":{"post":{"tags":["Auth Service (v2)"],"summary":"Authenticate","description":"Get OAuth token or start authentication flow if needed.","operationId":"authenticate_v2_auth_authenticate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthAuthenticateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthAuthenticateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]}},"/v2/auth/wait/{auth_id}":{"get":{"tags":["Auth Service (v2)"],"summary":"Wait For Auth Completion","description":"Wait for OAuth authentication completion.","operationId":"wait_for_auth_completion_v2_auth_wait__auth_id__get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"auth_id","in":"path","required":true,"schema":{"type":"string","description":"Authentication ID to wait for","title":"Auth Id"},"description":"Authentication ID to wait for"},{"name":"timeout","in":"query","required":false,"schema":{"type":"integer","description":"Timeout in seconds (default: 30)","default":30,"title":"Timeout"},"description":"Timeout in seconds (default: 30)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthWaitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/providers/mcp-discover":{"post":{"tags":["Auth Service (v2)"],"summary":"Create Mcp Oauth Provider","description":"Create an OAuth provider via MCP auto-discovery.","operationId":"create_mcp_oauth_provider_v2_auth_providers_mcp_discover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MCPOAuthProviderCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]}},"/v2/auth/providers/{provider_id}":{"get":{"tags":["Auth Service (v2)"],"summary":"Get Oauth Provider","description":"Get a specific OAuth provider.","operationId":"get_oauth_provider_v2_auth_providers__provider_id__get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","description":"OAuth provider ID","title":"Provider Id"},"description":"OAuth provider ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Auth Service (v2)"],"summary":"Update Oauth Provider","description":"Update an OAuth provider.","operationId":"update_oauth_provider_v2_auth_providers__provider_id__patch","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthProviderUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthProviderResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Auth Service (v2)"],"summary":"Delete Oauth Provider","description":"Delete an OAuth provider.","operationId":"delete_oauth_provider_v2_auth_providers__provider_id__delete","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/tokens":{"get":{"tags":["Auth Service (v2)"],"summary":"List Oauth Tokens For User","description":"List the calling user's tokens for a provider.","operationId":"list_oauth_tokens_for_user_v2_auth_tokens_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OAuth provider ID","title":"Provider Id"},"description":"OAuth provider ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OAuthTokenSummary"},"title":"Response List Oauth Tokens For User V2 Auth Tokens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Auth Service (v2)"],"summary":"Delete Oauth Tokens For User","description":"Delete all tokens for the current user for the given provider (across agents).","operationId":"delete_oauth_tokens_for_user_v2_auth_tokens_delete","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"query","required":true,"schema":{"type":"string","description":"OAuth provider ID to revoke for current user","title":"Provider Id"},"description":"OAuth provider ID to revoke for current user"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/tokens/{token_id}/metadata":{"patch":{"tags":["Auth Service (v2)"],"summary":"Update Token Label","description":"Update a token's provider_account_label. Only the token owner can update.","operationId":"update_token_label_v2_auth_tokens__token_id__metadata_patch","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/tokens/{token_id}":{"delete":{"tags":["Auth Service (v2)"],"summary":"Delete Single Oauth Token","description":"Delete a specific OAuth token, revoking it at the provider first.\n\nOnly the token owner can delete it.","operationId":"delete_single_oauth_token_v2_auth_tokens__token_id__delete","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"token_id","in":"path","required":true,"schema":{"type":"string","title":"Token Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/tokens/exists":{"get":{"tags":["Auth Service (v2)"],"summary":"Check Oauth Token Exists","description":"Return whether the current user has any tokens for a given provider (across agents).","operationId":"check_oauth_token_exists_v2_auth_tokens_exists_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"provider_id","in":"query","required":true,"schema":{"type":"string","description":"OAuth provider ID","title":"Provider Id"},"description":"OAuth provider ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/tokens/workspace/slack/exists":{"get":{"tags":["Auth Service (v2)"],"summary":"Check Workspace Slack Tokens Exist","description":"Check if the workspace has any Slack tokens.","operationId":"check_workspace_slack_tokens_exist_v2_auth_tokens_workspace_slack_exists_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenStatusResponse"}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]}},"/v2/auth/tokens/workspace/slack":{"delete":{"tags":["Auth Service (v2)"],"summary":"Revoke All Slack Tokens For Workspace","description":"Revoke ALL Slack tokens for the workspace. Admin-only action that disconnects Slack entirely.\n\nThis is a destructive operation that:\n- Revokes all Slack tokens on Slack's side for all users in the workspace\n- Deletes all Slack tokens from the database","operationId":"revoke_all_slack_tokens_for_workspace_v2_auth_tokens_workspace_slack_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}]}},"/v2/auth/agents/{agent_id}/connections":{"get":{"tags":["Agent Connections (v2)"],"summary":"List Connections","operationId":"list_connections_v2_auth_agents__agent_id__connections_get","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","description":"Agent ID","title":"Agent Id"},"description":"Agent ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentConnectionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Agent Connections (v2)"],"summary":"Create Connection","operationId":"create_connection_v2_auth_agents__agent_id__connections_post","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","description":"Agent ID","title":"Agent Id"},"description":"Agent ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAgentConnectionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v2/auth/agents/{agent_id}/connections/{connection_id}":{"delete":{"tags":["Agent Connections (v2)"],"summary":"Remove Connection","operationId":"remove_connection_v2_auth_agents__agent_id__connections__connection_id__delete","security":[{"API Key":[]},{"Tenant ID":[]},{"Bearer Auth":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","description":"Agent ID","title":"Agent Id"},"description":"Agent ID"},{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","description":"Connection ID","title":"Connection Id"},"description":"Connection ID"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AgentConnectionListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AgentConnectionResponse"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"AgentConnectionListResponse"},"AgentConnectionResponse":{"properties":{"id":{"type":"string","title":"Id"},"agent_id":{"type":"string","title":"Agent Id"},"oauth_token_id":{"type":"string","title":"Oauth Token Id"},"provider_id":{"type":"string","title":"Provider Id"},"provider_account_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Account Label"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_by":{"type":"string","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","agent_id","oauth_token_id","provider_id","provider_account_label","scopes","expires_at","created_by","created_at"],"title":"AgentConnectionResponse"},"AuthAuthenticateRequest":{"properties":{"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"ls_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ls User Id"},"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"provider":{"type":"string","title":"Provider"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"use_agent_builder_public_oauth":{"type":"boolean","title":"Use Agent Builder Public Oauth","default":false,"include_in_schema":false},"force_new":{"type":"boolean","title":"Force New","default":false},"token_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Token Id"},"is_default":{"type":"boolean","title":"Is Default","default":true}},"type":"object","required":["provider","scopes"],"title":"AuthAuthenticateRequest","description":"Auth authenticate request."},"AuthAuthenticateResponse":{"properties":{"status":{"$ref":"#/components/schemas/AuthStatus"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"auth_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Id"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["status"],"title":"AuthAuthenticateResponse","description":"Auth authenticate response."},"AuthStatus":{"type":"string","enum":["completed","pending","connection_required","token_expired"],"title":"AuthStatus","description":"Valid authentication status values."},"AuthWaitResponse":{"properties":{"status":{"$ref":"#/components/schemas/AuthWaitStatus"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","required":["status"],"title":"AuthWaitResponse","description":"Auth wait response."},"AuthWaitStatus":{"type":"string","enum":["completed","pending","timeout","not_found"],"title":"AuthWaitStatus","description":"Valid auth wait status values."},"Container":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the container. Must be a DNS_LABEL."},"image":{"type":"string","title":"Image","description":"Container image name."},"imagePullPolicy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Imagepullpolicy","description":"Image pull policy. One of Always, Never, IfNotPresent."},"command":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Command","description":"Entrypoint array. Not executed within a shell."},"args":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Args","description":"Arguments to the entrypoint."},"workingDir":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workingdir","description":"Container's working directory."},"env":{"anyOf":[{"items":{"$ref":"#/components/schemas/EnvVar"},"type":"array"},{"type":"null"}],"title":"Env","description":"List of environment variables to set in the container."},"envFrom":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Envfrom","description":"List of sources to populate environment variables in the container."},"resources":{"anyOf":[{"$ref":"#/components/schemas/ResourceRequirements"},{"type":"null"}],"description":"Compute resource requirements."},"volumeMounts":{"anyOf":[{"items":{"$ref":"#/components/schemas/VolumeMount"},"type":"array"},{"type":"null"}],"title":"Volumemounts","description":"Pod volumes to mount into the container's filesystem."},"securityContext":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Securitycontext","description":"Security options the pod should run with."},"restartPolicy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Restartpolicy","description":"RestartPolicy for the container (for sidecar containers). One of Always, OnFailure."}},"type":"object","required":["name","image"],"title":"Container","description":"Container specification for init and sidecar containers."},"CreateAgentConnectionRequest":{"properties":{"oauth_token_id":{"type":"string","title":"Oauth Token Id"}},"type":"object","required":["oauth_token_id"],"title":"CreateAgentConnectionRequest"},"Deployment":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the deployment.
A LangSmith tracing project with the same name will also automatically be created. This cannot be changed once the deployment is created."},"source":{"type":"string","enum":["github","external_docker","internal_docker","internal_source"],"title":"Source","description":"Deploy from a GitHub repository (`github`) or an external Docker image (`external_docker`).
Deploying from GitHub is only available for Cloud SaaS deployments. Deploying from an external Docker image is only available for self-hosted deployments. This cannot be changed once the deployment is created."},"source_config":{"$ref":"#/components/schemas/SourceConfig"},"source_revision_config":{"$ref":"#/components/schemas/SourceRevisionConfig"},"secrets":{"items":{"$ref":"#/components/schemas/Secret"},"type":"array","title":"Secrets"},"secret_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/SecretReference"},"type":"array"},{"type":"null"}],"title":"Secret References","description":"List of Kubernetes Secret references.
Only applicable for `external_docker` source."},"id":{"type":"string","format":"uuid","title":"ID","description":"The ID of the deployment.
This is a read-only field."},"tenant_id":{"type":"string","format":"uuid","title":"Tenant ID","description":"The ID of the tenant that owns the deployment.
This is a read-only field."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"The creation time of the deployment.
This is a read-only field."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"The last update time of the deployment.
This is a read-only field."},"status":{"type":"string","enum":["AWAITING_DATABASE","READY","UNUSED","AWAITING_DELETE","UNKNOWN"],"title":"Status","description":"The status of the deployment.
This is a read-only field."},"latest_revision_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Latest Revision ID","description":"The ID of the latest revision of the deployment.
This is a read-only field."},"active_revision_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Active Revision ID","description":"The ID of the current (actively deployed) revision of the deployment.
This is a read-only field."},"image_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Version","description":"Image version of the deployment."}},"type":"object","required":["name","source","source_config","source_revision_config","secrets","id","tenant_id","created_at","updated_at","status","latest_revision_id","active_revision_id"],"title":"Deployment","description":"Deployment resource."},"DeploymentCreateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the deployment.
A LangSmith tracing project with the same name will also automatically be created. This cannot be changed once the deployment is created."},"source":{"type":"string","enum":["github","external_docker","internal_docker","internal_source"],"title":"Source","description":"Deploy from a GitHub repository (`github`) or an external Docker image (`external_docker`).
Deploying from GitHub is only available for Cloud SaaS deployments. Deploying from an external Docker image is only available for self-hosted deployments. This cannot be changed once the deployment is created."},"source_config":{"$ref":"#/components/schemas/SourceConfigRequest"},"source_revision_config":{"$ref":"#/components/schemas/SourceRevisionConfigRequest"},"secrets":{"items":{"$ref":"#/components/schemas/Secret"},"type":"array","title":"Secrets"},"secret_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/SecretReference"},"type":"array"},{"type":"null"}],"title":"Secret References","description":"List of Kubernetes Secret references.
Only applicable for `external_docker` source."}},"type":"object","required":["name","source","source_config","source_revision_config","secrets"],"title":"DeploymentCreateRequest","description":"Request body for creating a deployment."},"DeploymentPatchRequest":{"properties":{"revision_source":{"anyOf":[{"type":"string","enum":["github","internal_docker","internal_source"]},{"type":"null"}],"title":"Revision Source","description":"Override the source for this revision. If omitted, falls back to deployment's default source."},"source_config":{"anyOf":[{"$ref":"#/components/schemas/SourceConfigRequest"},{"type":"null"}]},"source_revision_config":{"anyOf":[{"$ref":"#/components/schemas/SourceRevisionConfigRequest"},{"type":"null"}]},"secrets":{"anyOf":[{"items":{"$ref":"#/components/schemas/Secret"},"type":"array"},{"type":"null"}],"title":"Secrets"},"secret_references":{"anyOf":[{"items":{"$ref":"#/components/schemas/SecretReference"},"type":"array"},{"type":"null"}],"title":"Secret References","description":"List of Kubernetes Secret references.
Only applicable for `external_docker` source."}},"type":"object","title":"DeploymentPatchRequest","description":"Request body for patching a deployment.
\n
\nPatching a deployment may trigger a new revision depending on the provided `source` configurations."},"DeploymentsList":{"properties":{"resources":{"items":{"$ref":"#/components/schemas/Deployment"},"type":"array","title":"Resources"},"offset":{"type":"integer","title":"Offset","description":"Pagination offset. Pass this value to subsequent requests to fetch the next page."}},"type":"object","required":["resources","offset"],"title":"DeploymentsList"},"EnvVar":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the environment variable. Must be a C_IDENTIFIER."},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value","description":"Variable value. Defaults to empty string."},"valueFrom":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Valuefrom","description":"Source for the environment variable's value. Cannot be used if value is not empty."}},"type":"object","required":["name"],"title":"EnvVar","description":"Environment variable for a container."},"GithubIntegration":{"properties":{"id":{"type":"string","format":"uuid","title":"ID","description":"GitHub Integration ID.
For example, in the `POST /v2/deployments` request body, set `integration_id` to the value of this field."},"installation_id":{"type":"integer","title":"Installation ID","description":"GitHub installation ID."},"name":{"type":"string","title":"Name","description":"GitHub accout name."}},"type":"object","required":["id","installation_id","name"],"title":"GithubIntegration","description":"Metadata for a GitHub integration."},"GithubRepository":{"properties":{"host_integration_id":{"type":"string","format":"uuid","title":"GitHub Integration ID","description":"GitHub Integration ID.
For example, in the `POST /v2/deployments` request body, set `integration_id` to the value of this field."},"id":{"type":"integer","title":"ID","description":"GitHub repository ID."},"name":{"type":"string","title":"Name","description":"GitHub repository name."},"owner":{"type":"string","title":"Owner","description":"GitHub repository owner."},"url":{"type":"string","title":"URL","description":"GitHub repository URL.
For example, in the `POST /v2/deployments` request body, set `source_config.repo_url` to the value of this field."},"default_branch":{"type":"string","title":"Default Branch","description":"GitHub repository default branch.
For example, in the `POST /v2/deployments` request body, set `source_revision_config.repo_ref` to the value of this field."}},"type":"object","required":["host_integration_id","id","name","owner","url","default_branch"],"title":"GithubRepository","description":"Metadata for a GitHub repository."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Listener":{"properties":{"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version","description":"The version of the listener."},"compute_type":{"type":"string","const":"k8s","title":"Compute Type","description":"The compute type of the listener.
This cannot be changed (`PUT`) once the listener is created."},"compute_id":{"type":"string","title":"Compute Id","description":"User assigned unique ID of the compute infrastructure for the listener.
For example, if `compute_type` is `k8s`, then the user may set this field to the Kubernetes cluster name. This cannot be changed (`PUT`) once the listener is created."},"compute_config":{"$ref":"#/components/schemas/ListenerComputeConfig"},"id":{"type":"string","format":"uuid","title":"ID","description":"System assigned ID of the listener.
This is a read-only field."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"The creation time of the listener.
This is a read-only field."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"The last update time of the listener.
This is a read-only field."}},"type":"object","required":["compute_type","compute_id","compute_config","id","created_at","updated_at"],"title":"Listener","description":"Listener resource."},"ListenerComputeConfig":{"properties":{"k8s_namespaces":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Kubernetes Namespaces","description":"A list of Kubernetes namespaces to which the listener is configured for.
Only applicable for `k8s` compute type."}},"type":"object","title":"ListenerComputeConfig","description":"Fields for a listener that are specific to `compute_type`.
\n
\nAll fields are nullable, but are validated based on `compute_type`."},"ListenerConfig":{"properties":{"k8s_namespace":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"K8S Namespace","description":"Kubernetes namespace where the deployment will be deployed to.
This cannot be changed (`PATCH`) once the deployment is created. Only applicable for deployments of listeners with `k8s` compute type."}},"type":"object","title":"ListenerConfig","description":"Listener configuration for the deployment.
\n
\nAll fields are nullable, but are validated based on `compute_type` of the listener ID. Only applicable for `external_docker` source."},"ListenerCreateRequest":{"properties":{"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version","description":"The version of the listener."},"compute_type":{"type":"string","const":"k8s","title":"Compute Type","description":"The compute type of the listener.
This cannot be changed (`PUT`) once the listener is created."},"compute_id":{"type":"string","title":"Compute Id","description":"User assigned unique ID of the compute infrastructure for the listener.
For example, if `compute_type` is `k8s`, then the user may set this field to the Kubernetes cluster name. This cannot be changed (`PUT`) once the listener is created."},"compute_config":{"$ref":"#/components/schemas/ListenerComputeConfig"}},"type":"object","required":["compute_type","compute_id","compute_config"],"title":"ListenerCreateRequest","description":"Request body for creating a listener.
\n
\nA listener must have a unique combination of `workspace_id` and `compute_id`."},"ListenerPatchRequest":{"properties":{"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version","description":"The version of the listener."},"compute_config":{"anyOf":[{"$ref":"#/components/schemas/ListenerComputeConfig"},{"type":"null"}]}},"type":"object","title":"ListenerPatchRequest","description":"Requst body for patching a listener."},"ListenersList":{"properties":{"resources":{"items":{"$ref":"#/components/schemas/Listener"},"type":"array","title":"Resources"},"offset":{"type":"integer","title":"Offset","description":"Pagination offset. Pass this value to subsequent requests to fetch the next page."}},"type":"object","required":["resources","offset"],"title":"ListenersList"},"LocalObjectReference":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the referent (e.g., name of a Secret for imagePullSecrets)."}},"type":"object","required":["name"],"title":"LocalObjectReference","description":"Reference to an object in the same namespace."},"MCPOAuthProviderCreateRequest":{"properties":{"provider_id":{"type":"string","title":"Provider Id"},"name":{"type":"string","title":"Name"},"mcp_server_url":{"type":"string","title":"Mcp Server Url"}},"type":"object","required":["provider_id","name","mcp_server_url"],"title":"MCPOAuthProviderCreateRequest","description":"Request model for creating OAuth provider via MCP auto-discovery."},"OAuthFinalizeRequest":{"properties":{"code":{"type":"string","title":"Code"},"state":{"type":"string","title":"State"}},"type":"object","required":["code","state"],"title":"OAuthFinalizeRequest","description":"Request model for frontend-bridged OAuth callback finalization."},"OAuthProviderCreateRequest":{"properties":{"provider_id":{"type":"string","title":"Provider Id"},"name":{"type":"string","title":"Name"},"client_id":{"type":"string","title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"},"auth_url":{"type":"string","title":"Auth Url"},"token_url":{"type":"string","title":"Token Url"},"uses_pkce":{"type":"boolean","title":"Uses Pkce","default":false},"code_challenge_method":{"type":"string","title":"Code Challenge Method","default":"S256"},"provider_type":{"anyOf":[{"type":"string","enum":["microsoft","salesforce","slack"]},{"type":"null"}],"title":"Provider Type"},"token_endpoint_auth_method":{"type":"string","enum":["none","client_secret_basic","client_secret_post"],"title":"Token Endpoint Auth Method","default":"client_secret_post"}},"type":"object","required":["provider_id","name","client_id","auth_url","token_url"],"title":"OAuthProviderCreateRequest","description":"Request model for creating OAuth provider manually."},"OAuthProviderResponse":{"properties":{"id":{"type":"string","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"provider_id":{"type":"string","title":"Provider Id"},"name":{"type":"string","title":"Name"},"client_id":{"type":"string","title":"Client Id"},"auth_url":{"type":"string","title":"Auth Url"},"token_url":{"type":"string","title":"Token Url"},"uses_pkce":{"type":"boolean","title":"Uses Pkce"},"code_challenge_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge Method"},"provider_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Type"},"mcp_server_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Server Url"},"token_endpoint_auth_method":{"type":"string","title":"Token Endpoint Auth Method","default":"client_secret_post"},"is_dynamic_client":{"type":"boolean","title":"Is Dynamic Client","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","organization_id","provider_id","name","client_id","auth_url","token_url","uses_pkce","code_challenge_method","created_at","updated_at"],"title":"OAuthProviderResponse","description":"Response model for OAuth provider."},"OAuthProviderUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"},"auth_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auth Url"},"token_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Url"},"uses_pkce":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Uses Pkce"},"code_challenge_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge Method"}},"type":"object","title":"OAuthProviderUpdateRequest","description":"Request model for updating OAuth provider."},"OAuthTokenStatusResponse":{"properties":{"has_token":{"type":"boolean","title":"Has Token"}},"type":"object","required":["has_token"],"title":"OAuthTokenStatusResponse","description":"Simple status indicating if a user has a token for a provider/agent."},"OAuthTokenSummary":{"properties":{"id":{"type":"string","title":"Id"},"provider_id":{"type":"string","title":"Provider Id"},"provider_account_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Account Label"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes","default":[]},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"is_default":{"type":"boolean","title":"Is Default","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","provider_id","created_at","updated_at"],"title":"OAuthTokenSummary","description":"Public-facing token summary — no sensitive data."},"OAuthTokenUpdateRequest":{"properties":{"provider_account_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Account Label"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"OAuthTokenUpdateRequest","description":"Request model for updating a token's metadata."},"ResourceRequirements":{"properties":{"limits":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Limits","description":"Limits describes the maximum amount of compute resources allowed."},"requests":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Requests","description":"Requests describes the minimum amount of compute resources required."}},"type":"object","title":"ResourceRequirements","description":"Compute resource requirements."},"ResourceSpec-Input":{"properties":{"min_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Scale","description":"The minimum scale (number of replicas) of the deployment."},"max_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Scale","description":"The maximum scale (number of replicas) of the deployment."},"cpu":{"anyOf":[{"type":"number","maximum":8.0,"minimum":0.1},{"type":"null"}],"title":"CPU","description":"CPU request in cores for a single replica of the deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If cpu_limit is not set, limit defaults to 2x this value.","examples":[0.1,0.5,1,2,4]},"cpu_limit":{"anyOf":[{"type":"number","maximum":16.0,"minimum":0.1},{"type":"null"}],"title":"CPU Limit","description":"CPU limit in cores for a single replica of the deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not set, defaults to 2x cpu.","examples":[0.2,1,2,4,8,16]},"memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Memory (MB)","description":"Memory request (MB) of a single replica of the deployment. If memory_limit_mb is not set, limit defaults to 2x this value."},"memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Memory Limit (MB)","description":"Memory limit (MB) of a single replica of the deployment. If not set, defaults to 2x memory_mb."},"queue_min_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Min Scale","description":"The minimum scale (number of replicas) of the queue deployment. If not provided, defaults to the same value as `min_scale`."},"queue_max_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Max Scale","description":"The maximum scale (number of replicas) of the queue deployment. If not provided, defaults to the same value as `max_scale`."},"queue_cpu":{"anyOf":[{"type":"number","maximum":8.0,"minimum":0.1},{"type":"null"}],"title":"Queue CPU","description":"CPU request in cores for a single replica of the queue deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not provided, defaults to the same value as `cpu`. If queue_cpu_limit is not set, limit defaults to 2x this value.","examples":[0.1,0.5,1,2]},"queue_cpu_limit":{"anyOf":[{"type":"number","maximum":16.0,"minimum":0.1},{"type":"null"}],"title":"Queue CPU Limit","description":"CPU limit in cores for a single replica of the queue deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not set, defaults to 2x queue_cpu.","examples":[0.2,1,2,4,8]},"queue_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Memory (MB)","description":"Memory request (MB) of a single replica of the queue deployment. If not provided, defaults to the same value as `memory_mb`. If queue_memory_limit_mb is not set, limit defaults to 2x this value."},"queue_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Memory Limit (MB)","description":"Memory limit (MB) of a single replica of the queue deployment. If not set, defaults to 2x queue_memory_mb."},"orchestrator_cpu":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Orchestrator CPU","description":"do not use"},"orchestrator_cpu_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Orchestrator CPU Limit","description":"do not use"},"orchestrator_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Memory (MB)","description":"do not use"},"orchestrator_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Memory Limit (MB)","description":"do not use"},"orchestrator_min_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Min Scale","description":"do not use"},"orchestrator_max_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Max Scale","description":"do not use"},"executor_cpu":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Executor CPU","description":"do not use"},"executor_cpu_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Executor CPU Limit","description":"do not use"},"executor_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Executor Memory (MB)","description":"do not use"},"executor_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Executor Memory Limit (MB)","description":"do not use"},"redis_cpu":{"anyOf":[{"type":"number","maximum":8.0,"minimum":0.1},{"type":"null"}],"title":"Redis CPU","description":"CPU request in cores for the Redis deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If redis_cpu_limit is not set, limit defaults to 2x this value.","examples":[0.1,0.5,1,2]},"redis_cpu_limit":{"anyOf":[{"type":"number","maximum":16.0,"minimum":0.1},{"type":"null"}],"title":"Redis CPU Limit","description":"CPU limit in cores for the Redis deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not set, defaults to 2x redis_cpu.","examples":[0.2,1,2,4,8]},"redis_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Redis Memory Mb","description":"Memory request (MB) of the Redis deployment. If redis_memory_limit_mb is not set, limit defaults to this value."},"redis_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Redis Memory Limit (MB)","description":"Memory limit (MB) of the Redis deployment. If not set, defaults to redis_memory_mb."},"labels":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Labels","description":"Additional labels to apply to resources created for the deployment."},"annotations":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Annotations","description":"Additional annotations to apply to resources created for the deployment."},"service_account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Account Name","description":"The name of the service account to use for the deployment.
This must already exist in the Kubernetes namespace where the deployment will be deployed to."},"image_pull_secrets":{"anyOf":[{"items":{"$ref":"#/components/schemas/LocalObjectReference"},"type":"array"},{"type":"null"}],"title":"Image Pull Secrets","description":"List of references to secrets in the same namespace to use for pulling container images. Each entry is a LocalObjectReference to a Secret of type kubernetes.io/dockerconfigjson."},"volumes":{"anyOf":[{"items":{"$ref":"#/components/schemas/Volume"},"type":"array"},{"type":"null"}],"title":"Volumes","description":"List of volumes that can be mounted by containers belonging to the pod. Reference the kubernetes documentation for more details on how to configure volumes."},"volume_mounts":{"anyOf":[{"items":{"$ref":"#/components/schemas/VolumeMount"},"type":"array"},{"type":"null"}],"title":"Volume Mounts","description":"Pod volumes to mount into the container's filesystem. Reference the kubernetes documentation for more details on how to configure volume mounts."},"init_containers":{"anyOf":[{"items":{"$ref":"#/components/schemas/Container"},"type":"array"},{"type":"null"}],"title":"Init Containers","description":"List of initialization containers belonging to the pod. Init containers are set as initContainers in the pod spec and run to completion before the main application container starts."},"sidecars":{"anyOf":[{"items":{"$ref":"#/components/schemas/Container"},"type":"array"},{"type":"null"}],"title":"Sidecars","description":"List of sidecar containers that run alongside the main application container. These will be added to the pod spec as additional containers."},"db_cpu":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Database CPU","description":"CPU request of the Postgres database deployment. If db_cpu_limit is not set, limit defaults to 2x this value."},"db_cpu_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Database CPU Limit","description":"CPU limit of the Postgres database deployment. If not set, defaults to 2x db_cpu."},"db_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Memory (MB)","description":"Memory request (MB) of the Postgres database deployment. If db_memory_limit_mb is not set, limit defaults to 2x this value."},"db_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Memory Limit (MB)","description":"Memory limit (MB) of the Postgres database deployment. If not set, defaults to 2x db_memory_mb."},"db_storage_gi":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Storage (GiB)","description":"Storage (GiB) of the Postgres database deployment."},"db_max_connections":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Max Connections","description":"Maximum number of connections allowed to the Postgres database."}},"type":"object","title":"ResourceSpec","description":"Resource specification for the deployment.
\n
\nWhen updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision and overwrite the existing resource_spec for the deployment. Only applicable for `external_docker` source."},"ResourceSpec-Output":{"properties":{"min_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Scale","description":"The minimum scale (number of replicas) of the deployment."},"max_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Scale","description":"The maximum scale (number of replicas) of the deployment."},"cpu":{"anyOf":[{"type":"number","maximum":8.0,"minimum":0.1},{"type":"null"}],"title":"CPU","description":"CPU request in cores for a single replica of the deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If cpu_limit is not set, limit defaults to 2x this value.","examples":[0.1,0.5,1,2,4]},"cpu_limit":{"anyOf":[{"type":"number","maximum":16.0,"minimum":0.1},{"type":"null"}],"title":"CPU Limit","description":"CPU limit in cores for a single replica of the deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not set, defaults to 2x cpu.","examples":[0.2,1,2,4,8,16]},"memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Memory (MB)","description":"Memory request (MB) of a single replica of the deployment. If memory_limit_mb is not set, limit defaults to 2x this value."},"memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Memory Limit (MB)","description":"Memory limit (MB) of a single replica of the deployment. If not set, defaults to 2x memory_mb."},"queue_min_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Min Scale","description":"The minimum scale (number of replicas) of the queue deployment. If not provided, defaults to the same value as `min_scale`."},"queue_max_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Max Scale","description":"The maximum scale (number of replicas) of the queue deployment. If not provided, defaults to the same value as `max_scale`."},"queue_cpu":{"anyOf":[{"type":"number","maximum":8.0,"minimum":0.1},{"type":"null"}],"title":"Queue CPU","description":"CPU request in cores for a single replica of the queue deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not provided, defaults to the same value as `cpu`. If queue_cpu_limit is not set, limit defaults to 2x this value.","examples":[0.1,0.5,1,2]},"queue_cpu_limit":{"anyOf":[{"type":"number","maximum":16.0,"minimum":0.1},{"type":"null"}],"title":"Queue CPU Limit","description":"CPU limit in cores for a single replica of the queue deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not set, defaults to 2x queue_cpu.","examples":[0.2,1,2,4,8]},"queue_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Memory (MB)","description":"Memory request (MB) of a single replica of the queue deployment. If not provided, defaults to the same value as `memory_mb`. If queue_memory_limit_mb is not set, limit defaults to 2x this value."},"queue_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Memory Limit (MB)","description":"Memory limit (MB) of a single replica of the queue deployment. If not set, defaults to 2x queue_memory_mb."},"orchestrator_cpu":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Orchestrator CPU","description":"do not use"},"orchestrator_cpu_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Orchestrator CPU Limit","description":"do not use"},"orchestrator_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Memory (MB)","description":"do not use"},"orchestrator_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Memory Limit (MB)","description":"do not use"},"orchestrator_min_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Min Scale","description":"do not use"},"orchestrator_max_scale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Orchestrator Max Scale","description":"do not use"},"executor_cpu":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Executor CPU","description":"do not use"},"executor_cpu_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Executor CPU Limit","description":"do not use"},"executor_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Executor Memory (MB)","description":"do not use"},"executor_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Executor Memory Limit (MB)","description":"do not use"},"redis_cpu":{"anyOf":[{"type":"number","maximum":8.0,"minimum":0.1},{"type":"null"}],"title":"Redis CPU","description":"CPU request in cores for the Redis deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If redis_cpu_limit is not set, limit defaults to 2x this value.","examples":[0.1,0.5,1,2]},"redis_cpu_limit":{"anyOf":[{"type":"number","maximum":16.0,"minimum":0.1},{"type":"null"}],"title":"Redis CPU Limit","description":"CPU limit in cores for the Redis deployment. Supports fractional values (e.g. 0.5 for 500m). Values are rounded to 1 decimal place. If not set, defaults to 2x redis_cpu.","examples":[0.2,1,2,4,8]},"redis_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Redis Memory Mb","description":"Memory request (MB) of the Redis deployment. If redis_memory_limit_mb is not set, limit defaults to this value."},"redis_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Redis Memory Limit (MB)","description":"Memory limit (MB) of the Redis deployment. If not set, defaults to redis_memory_mb."},"labels":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Labels","description":"Additional labels to apply to resources created for the deployment."},"annotations":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Annotations","description":"Additional annotations to apply to resources created for the deployment."},"service_account_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Account Name","description":"The name of the service account to use for the deployment.
This must already exist in the Kubernetes namespace where the deployment will be deployed to."},"image_pull_secrets":{"anyOf":[{"items":{"$ref":"#/components/schemas/LocalObjectReference"},"type":"array"},{"type":"null"}],"title":"Image Pull Secrets","description":"List of references to secrets in the same namespace to use for pulling container images. Each entry is a LocalObjectReference to a Secret of type kubernetes.io/dockerconfigjson."},"volumes":{"anyOf":[{"items":{"$ref":"#/components/schemas/Volume"},"type":"array"},{"type":"null"}],"title":"Volumes","description":"List of volumes that can be mounted by containers belonging to the pod. Reference the kubernetes documentation for more details on how to configure volumes."},"volume_mounts":{"anyOf":[{"items":{"$ref":"#/components/schemas/VolumeMount"},"type":"array"},{"type":"null"}],"title":"Volume Mounts","description":"Pod volumes to mount into the container's filesystem. Reference the kubernetes documentation for more details on how to configure volume mounts."},"init_containers":{"anyOf":[{"items":{"$ref":"#/components/schemas/Container"},"type":"array"},{"type":"null"}],"title":"Init Containers","description":"List of initialization containers belonging to the pod. Init containers are set as initContainers in the pod spec and run to completion before the main application container starts."},"sidecars":{"anyOf":[{"items":{"$ref":"#/components/schemas/Container"},"type":"array"},{"type":"null"}],"title":"Sidecars","description":"List of sidecar containers that run alongside the main application container. These will be added to the pod spec as additional containers."},"db_cpu":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Database CPU","description":"CPU request of the Postgres database deployment. If db_cpu_limit is not set, limit defaults to 2x this value."},"db_cpu_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Database CPU Limit","description":"CPU limit of the Postgres database deployment. If not set, defaults to 2x db_cpu."},"db_memory_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Memory (MB)","description":"Memory request (MB) of the Postgres database deployment. If db_memory_limit_mb is not set, limit defaults to 2x this value."},"db_memory_limit_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Memory Limit (MB)","description":"Memory limit (MB) of the Postgres database deployment. If not set, defaults to 2x db_memory_mb."},"db_storage_gi":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Storage (GiB)","description":"Storage (GiB) of the Postgres database deployment."},"db_max_connections":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Database Max Connections","description":"Maximum number of connections allowed to the Postgres database."}},"type":"object","title":"ResourceSpec","description":"Resource specification for the deployment.
\n
\nWhen updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision and overwrite the existing resource_spec for the deployment. Only applicable for `external_docker` source."},"Revision":{"properties":{"id":{"type":"string","format":"uuid","title":"ID","description":"The ID of the revision.
This is a read-only field."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"The creation time of the revision.
This is a read-only field."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"The last update time of the revision.
This is a read-only field."},"status":{"type":"string","enum":["CREATING","QUEUED","AWAITING_BUILD","BUILDING","AWAITING_DEPLOY","DEPLOYING","CREATE_FAILED","BUILD_FAILED","DEPLOY_FAILED","DEPLOYED","SKIPPED","INTERRUPTED","UNKNOWN"],"title":"Status","description":"The status of the revision.
This is a read-only field."},"source":{"type":"string","enum":["github","external_docker","internal_docker","internal_source"],"title":"Source","description":"Deploy from a GitHub repository (`github`) or an external Docker image (`external_docker`).
Deploying from GitHub is only available for Cloud SaaS deployments. Deploying from an external Docker image is only available for self-hosted deployments. This cannot be changed once the deployment is created."},"source_revision_config":{"$ref":"#/components/schemas/SourceRevisionConfig"}},"type":"object","required":["id","created_at","updated_at","status","source","source_revision_config"],"title":"Revision","description":"Revision resource."},"RevisionsList":{"properties":{"resources":{"items":{"$ref":"#/components/schemas/Revision"},"type":"array","title":"Resources"},"offset":{"type":"integer","title":"Offset","description":"Pagination offset. Pass this value to subsequent requests to fetch the next page."}},"type":"object","required":["resources","offset"],"title":"RevisionsList"},"Secret":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the secret"},"value":{"type":"string","title":"Value","description":"Value of the secret"}},"type":"object","required":["name","value"],"title":"Secret","description":"Secret for a deployment.
\n
\nSecrets are accessible as environment variables in the deployment's container. In addition to user-defined secrets, Agent Server supports [pre-defined environment variables](https://langchain-ai.github.io/langgraph/cloud/reference/env_var/) that can be configured to augment the functionality of a deployment. When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision."},"SecretReference":{"properties":{"name":{"type":"string","title":"Name","description":"Name of the environment variable to populate."},"secret_name":{"type":"string","title":"Secret Name","description":"Name of the Kubernetes Secret that already exists in the same namespace as the deployment."},"secret_key":{"type":"string","title":"Secret Key","description":"Key within the Kubernetes Secret whose value should be populated to the environment variable."}},"type":"object","required":["name","secret_name","secret_key"],"title":"SecretReference","description":"Reference to an existing Kubernetes Secret to populate an environment variable."},"SourceConfig":{"properties":{"integration_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration ID","description":"The ID of the integration used for the deployment.
Retrieve this value from the `GET /v1/integrations/github/install` endpoint. This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `github` source."},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository URL","description":"The URL of the git repository used for the deployment.
This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `github` source."},"deployment_type":{"anyOf":[{"type":"string","enum":["dev_free","dev","prod"]},{"type":"null"}],"title":"Deployment Type","description":"The type of deployment to create.
See [Deployment Types](https://langchain-ai.github.io/langgraph/concepts/langgraph_control_plane/#deployment-types) for more details. This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `github` source."},"build_on_push":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Build On Push","description":"Whether to build a new revision for the deployment on push to the `source_revision_config.repo_ref` (e.g. git branch).
Cannot be enabled when `source_revision_config.repo_ref` specifies a tag (starts with `refs/tags/`). Tags are immutable and cannot trigger automatic builds on push.
Only applicable for `github` source."},"custom_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom URL","description":"The custom URL of the deployment.
This field can only be set for `external_docker` source deployments. However, it will be set automatically for `github` source deployments (read only)."},"resource_spec":{"anyOf":[{"$ref":"#/components/schemas/ResourceSpec-Output"},{"type":"null"}]},"listener_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Listener ID","description":"The ID of the listener used for the deployment.
Retrieve this value from the `GET /v2/listeners` endpoint. This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `external_docker` source."},"listener_config":{"anyOf":[{"$ref":"#/components/schemas/ListenerConfig"},{"type":"null"}]},"install_command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Install Command","description":"The custom install command to run for your deployment. This only applies to JS deployments. This command will be run from the root of your repository - NOT where your langgraph.json file lives (unless these are the same place). If not provided, we will autodetect the command based on the presence of yarn/npm/etc. files."},"build_command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Command","description":"The custom build command to run for your deployment. This only applies to JS deployments. This command will be run from where your langgraph.json file lives. This is helpful for using shared workspaces in your deployments, without having to provide a postinstall command or something similar in your package.json."}},"type":"object","title":"SourceConfig","description":"Source configuration."},"SourceConfigRequest":{"properties":{"integration_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Integration ID","description":"The ID of the integration used for the deployment.
Retrieve this value from the `GET /v1/integrations/github/install` endpoint. This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `github` source."},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repository URL","description":"The URL of the git repository used for the deployment.
This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `github` source."},"deployment_type":{"anyOf":[{"type":"string","enum":["dev_free","dev","prod"]},{"type":"null"}],"title":"Deployment Type","description":"The type of deployment to create.
See [Deployment Types](https://langchain-ai.github.io/langgraph/concepts/langgraph_control_plane/#deployment-types) for more details. This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `github` source."},"build_on_push":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Build On Push","description":"Whether to build a new revision for the deployment on push to the `source_revision_config.repo_ref` (e.g. git branch).
Cannot be enabled when `source_revision_config.repo_ref` specifies a tag (starts with `refs/tags/`). Tags are immutable and cannot trigger automatic builds on push.
Only applicable for `github` source."},"custom_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom URL","description":"The custom URL of the deployment.
This field can only be set for `external_docker` source deployments. However, it will be set automatically for `github` source deployments (read only)."},"resource_spec":{"anyOf":[{"$ref":"#/components/schemas/ResourceSpec-Input"},{"type":"null"}]},"listener_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Listener ID","description":"The ID of the listener used for the deployment.
Retrieve this value from the `GET /v2/listeners` endpoint. This cannot be changed (`PATCH`) once the deployment is created. Only applicable for `external_docker` source."},"listener_config":{"anyOf":[{"$ref":"#/components/schemas/ListenerConfig"},{"type":"null"}]},"install_command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Install Command","description":"The custom install command to run for your deployment. This only applies to JS deployments. This command will be run from the root of your repository - NOT where your langgraph.json file lives (unless these are the same place). If not provided, we will autodetect the command based on the presence of yarn/npm/etc. files."},"build_command":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Command","description":"The custom build command to run for your deployment. This only applies to JS deployments. This command will be run from where your langgraph.json file lives. This is helpful for using shared workspaces in your deployments, without having to provide a postinstall command or something similar in your package.json."}},"type":"object","title":"SourceConfigRequest","description":"Fields for a deployment that are specific to the `source`, but do not require a new revision when modified or cannot be modified.
\n
\nAll fields are nullable, but are validated based on the `source`."},"SourceRevisionConfig":{"properties":{"repo_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Ref","description":"The git ref of the repository used for the deployment.
Supports:
- **Branches**: Specify just the branch name (e.g., `main`, `develop`)
- **Tags**: Specify the full ref path (e.g., `refs/tags/v1.0.0`)
When using a tag, `source_config.build_on_push` must be set to `false` since tags are immutable.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision. Only applicable for `github` source."},"langgraph_config_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LangGraph Configuration Path","description":"The path to the LangGraph configuration file (`langgraph.json`) used for the deployment.
Required on create for buildable sources (`github`, `internal_source`). Must be `null` for all other sources.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision."},"image_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image URI","description":"The URI of the Docker image used for the deployment.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision. Applicable for `external_docker` source."},"source_tarball_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Tarball Path","description":"The object path of the uploaded source tarball.
Must be an object path obtained from the `POST /deployments/{deployment_id}/upload-url` endpoint. Arbitrary paths are not accepted.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision. Only applicable for `internal_source` source."},"repo_commit_sha":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo commit SHA","description":"The commit SHA of the git repository used for the deployment.
This is a read-only field. Only applicable for `github` source."}},"type":"object","title":"SourceRevisionConfig","description":"Source revision configuration.
\n
\nFor a `Deployment` resource, the field values refer to the latest revision of the `Deployment`. For a `Revision` resource, the field values refer to the `Revision` itself."},"SourceRevisionConfigRequest":{"properties":{"repo_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Ref","description":"The git ref of the repository used for the deployment.
Supports:
- **Branches**: Specify just the branch name (e.g., `main`, `develop`)
- **Tags**: Specify the full ref path (e.g., `refs/tags/v1.0.0`)
When using a tag, `source_config.build_on_push` must be set to `false` since tags are immutable.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision. Only applicable for `github` source."},"langgraph_config_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"LangGraph Configuration Path","description":"The path to the LangGraph configuration file (`langgraph.json`) used for the deployment.
Required on create for buildable sources (`github`, `internal_source`). Must be `null` for all other sources.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision."},"image_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image URI","description":"The URI of the Docker image used for the deployment.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision. Applicable for `external_docker` source."},"source_tarball_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Tarball Path","description":"The object path of the uploaded source tarball.
Must be an object path obtained from the `POST /deployments/{deployment_id}/upload-url` endpoint. Arbitrary paths are not accepted.
When updating a deployment (`PATCH`), setting this field to a non-null value will trigger creation of a new revision. Only applicable for `internal_source` source."}},"type":"object","title":"SourceRevisionConfigRequest","description":"Fields for a deployment that are specific to the `source` and require a new revision when modified.
\n
\nAll fields are nullable, but are validated based on the `source`."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"Volume":{"properties":{"name":{"type":"string","title":"Name","description":"Volume's name. Must be a DNS_LABEL and unique within the pod."},"configMap":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Configmap","description":"ConfigMap represents a configMap that should populate this volume."},"secret":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Secret","description":"Secret represents a secret that should populate this volume."},"emptyDir":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Emptydir","description":"EmptyDir represents a temporary directory that shares a pod's lifetime."},"persistentVolumeClaim":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Persistentvolumeclaim","description":"PersistentVolumeClaim represents a reference to a PersistentVolumeClaim."},"nfs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Nfs","description":"NFS represents an NFS mount on the host that shares a pod's lifetime."},"projected":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Projected","description":"Projected represents a volume that projects several volume sources into the same directory."},"downwardAPI":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Downwardapi","description":"DownwardAPI represents downward API about the pod that should populate this volume."},"csi":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Csi","description":"CSI represents a volume that should be handled by an external CSI driver."}},"type":"object","title":"Volume","description":"Kubernetes Volume specification."},"VolumeMount":{"properties":{"name":{"type":"string","title":"Name","description":"This must match the Name of a Volume."},"mountPath":{"type":"string","title":"Mountpath","description":"Path within the container at which the volume should be mounted."},"subPath":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subpath","description":"Path within the volume from which the container's volume should be mounted."},"mountPropagation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mountpropagation","description":"Determines how mounts are propagated from the host to container and the other way around."},"readOnly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Readonly","description":"Mounted read-only if true, read-write otherwise."},"subPathExpr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subpathexpr","description":"Expanded path within the volume from which the container's volume should be mounted."}},"type":"object","title":"VolumeMount","description":"Kubernetes VolumeMount specification."}},"securitySchemes":{"LangSmith API Key":{"type":"apiKey","in":"header","name":"X-Api-Key"}}}}