diff --git a/docs/docs/cloud/reference/api/api_ref_control_plane.html b/docs/docs/cloud/reference/api/api_ref_control_plane.html new file mode 100644 index 000000000..618755f83 --- /dev/null +++ b/docs/docs/cloud/reference/api/api_ref_control_plane.html @@ -0,0 +1,19 @@ + + + + LangGraph Cloud API Reference + + + + + + + + + diff --git a/docs/docs/cloud/reference/api/openapi_control_plane.json b/docs/docs/cloud/reference/api/openapi_control_plane.json new file mode 100644 index 000000000..13acedaf3 --- /dev/null +++ b/docs/docs/cloud/reference/api/openapi_control_plane.json @@ -0,0 +1,695 @@ +{ + "openapi": "3.1.0", + "info": { + "title": "LangGraph Control Plane API (Beta)", + "version": "0.0.1", + "description": "The LangGraph Control Plane API is used to programmatically create and manage LangGraph Server deployments. For example, the APIs can be orchestrated to create custom CI/CD workflows.\n\n### Beta\nThis API is currently in beta and may change or break without notice. This API documentation may not be up-to-date with actual API functionality.\n### Host\nhttps://api.host.langchain.com/\n\n### Authentication\nTo authenticate with the LangGraph Control Plane API, set the `X-Api-Key` header to a valid LangSmith API key for each request.\n\n### Versioning\nEach endpoint path is prefixed with a version (e.g. `v1`).\n\n### Quick Start\n\n1. Call `GET /{version}/projects` to retrieve the `Project` `id`. The `Project` `id` is needed in subsequent API calls.\n2. Call `POST /{version}/projects/{project_id}/revisions` to create a new `Revision` for the `Project`.\n3. Call `GET /{version}/projects/{project_id}/revisions` to get the latest `Revision` (first element in returned list). Get the `Revision` `id`.\n4. Poll for `Revision` `status` until `status` is `DEPLOYED` by calling `GET /{version}/projects/{project_id}/revisions/{revision_id}`." + }, + "servers": [ + { + "url": "https://api.host.langchain.com" + } + ], + "tags": [ + { + "name": "Projects (v1)", + "description": "A project corresponds to a LangGraph Server deployment and the associated LangSmith tracing project.\n\nCreating a project via API is not currently supported/documented." + }, + { + "name": "Revisions (v1)", + "description": "A revision is a version of a LangGraph Server deployment. Different revisions may contain different code and/or environment variables. A project can have many revisions." + } + ], + "paths": { + "/v1/projects": { + "get": { + "tags": ["Projects (v1)"], + "summary": "List Projects", + "description": "List all projects.", + "operationId": "list_projects_projects_get", + "parameters": [ + { + "required": false, + "schema": { + "type": "integer", + "title": "Limit", + "description": "Maximum number of results to return. Minimum: 1. Maximum: 100.", + "default": 20 + }, + "name": "limit", + "in": "query" + }, + { + "required": false, + "schema": { + "type": "integer", + "title": "Offset", + "description": "Pagination offset value. Pass this value in subsequent requests to retrieve the next page of results. Minimum: 0.", + "default": 0 + }, + "name": "offset", + "in": "query" + }, + { + "required": false, + "schema": { + "type": "string", + "title": "Name Contains", + "description": "Filter string to filter projects by `name`." + }, + "name": "name_contains", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + } + } + } + } + } + } + }, + "/v1/projects/{project_id}": { + "get": { + "tags": ["Projects (v1)"], + "summary": "Get Project", + "description": "Get project by ID.", + "operationId": "get_project_projects__project_id__get", + "parameters": [ + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project ID" + }, + "name": "project_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + } + } + }, + "delete": { + "tags": ["Projects (v1)"], + "summary": "Delete Project", + "description": "Delete project by ID.", + "operationId": "delete_project_projects__project_id__delete", + "parameters": [ + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project ID" + }, + "name": "project_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + } + } + } + }, + "/v1/projects/{project_id}/revisions": { + "get": { + "tags": ["Revisions (v1)"], + "summary": "List Revisions", + "description": "List revisions of a project.", + "operationId": "list_revisions_projects__project_id__revisions_get", + "parameters": [ + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project ID" + }, + "name": "project_id", + "in": "path" + }, + { + "required": false, + "schema": { + "type": "integer", + "title": "Limit", + "description": "Maximum number of results to return. Minimum: 1. Maximum: 100.", + "default": 20 + }, + "name": "limit", + "in": "query" + }, + { + "required": false, + "schema": { + "type": "integer", + "title": "Offset", + "description": "Pagination offset value. Pass this value in subsequent requests to retrieve the next page of results. Minimum: 0.", + "default": 0 + }, + "name": "offset", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Revision" + } + } + } + } + } + } + }, + "post": { + "tags": ["Revisions (v1)"], + "summary": "Create Revision", + "description": "Create a new revision for a project.", + "operationId": "create_revision_projects__project_id__revisions_post", + "parameters": [ + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project ID" + }, + "name": "project_id", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateRevisionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Project" + } + } + } + } + } + } + }, + "/v1/projects/{project_id}/revisions/{revision_id}": { + "get": { + "tags": ["Revisions (v1)"], + "summary": "Get Revision", + "description": "Get revision by ID.", + "operationId": "get_revision_projects__project_id__revisions__revision_id__get", + "parameters": [ + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project ID" + }, + "name": "project_id", + "in": "path" + }, + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Revision ID" + }, + "name": "revision_id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Revision" + } + } + } + } + } + } + }, + "/v1/projects/{project_id}/revisions/{revision_id}/interrupt": { + "post": { + "tags": ["Revisions (v1)"], + "summary": "Interrupt Revision", + "description": "Interrupt revision by ID.\n\nIf the deployment of a revision appears \"stuck\", the revision may need to be interrupted. A new revision cannot be created if the latest revision is in a non-terminal `status`. In this scenario, the revision may need to be interrupted.", + "operationId": "interrupt_revision_projects__project_id__revisions__revision_id__interrupt_post", + "parameters": [ + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Project ID" + }, + "name": "project_id", + "in": "path" + }, + { + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Revision ID" + }, + "name": "revision_id", + "in": "path" + } + ] + } + } + }, + "components": { + "securitySchemes": { + "apiKeyAuth": { + "type": "apiKey", + "in": "header", + "name": "X-Api-Key" + } + }, + "schemas": { + "EnvVar": { + "type": "object", + "description": "An environment variable or secret.", + "properties": { + "name": { + "type": "string", + "description": "Environment variable or secret name.", + "required": true + }, + "value": { + "type": "string", + "description": "Environment variable or secret value.", + "required": true + }, + "type": { + "type": "string", + "enum": [ + "default", + "secret" + ], + "description": "Field to designate type of the environment variable (default) or secret.", + "required": true + } + } + }, + "ContainerSpec": { + "type": "object", + "description": "Container specification for a revision's deployment.\n\nIf any field is omitted or set to `null`, the internal default value is used depending on the deployment type (`dev` or `prod`).", + "properties": { + "min_scale": { + "type": ["integer", "null"], + "description": "Minimum number of replicas in deployment.", + "default": "null" + }, + "max_scale": { + "type": ["integer", "null"], + "description": "Maximum number of replicas in deployment.", + "default": "null" + }, + "cpu": { + "type": ["integer", "null"], + "description": "Number of vCPU cores per replica.", + "default": "null" + }, + "memory_mb": { + "type": ["integer", "null"], + "description": "Amount of memory in MB per replica.", + "default": "null" + } + } + }, + "CreateRevisionRequest": { + "type": "object", + "description": "Object for creating a new revision.", + "properties": { + "image_path": { + "type": ["string", "null"], + "description": "URI of the Docker image to deploy.\n\nIf this field is omitted or set to `null`, the previous revision's `image_path` value is used. Set this field for BYOC deployments. Omit this field if creating a new revision from a GitHub repository.", + "default": "null" + }, + "repo_path": { + "type": ["string", "null"], + "description": "Path to `langgraph.json` configuration file. For example, `langgraph.json` or `src/langgraph.json`.\n\nIf this field is omitted or set to `null`, the previous revision's `repo_path` value is used. Set this field for deployments from a GitHub repository. Omit this field if creating a new revision from a Docker image.", + "default": "null" + }, + "env_vars": { + "type": "array", + "description": "List of environment variables or secrets.\n\nThe complete list of environment variables and secrets must ALWAYS be specified in every request to `POST /{version}/projects/{project_id}/revisions`.", + "items": { + "$ref": "#/components/schemas/EnvVar" + }, + "default": "null" + }, + "shareable": { + "type": "boolean", + "description": "Boolean flag to configure if a deployment is shareable through LangGraph Studio.\n\nThis field does not apply to BYOC deployments.", + "default": false + }, + "container_spec": { + "description": "If this field is omitted or set to `null`, the previous revision's `container_spec` value is used.", + "$ref": "#/components/schemas/ContainerSpec", + "default": "null" + } + } + }, + "Project": { + "type": "object", + "description": "A project corresponds to a LangGraph Server deployment and the associated LangSmith tracing project.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "ID of the project.", + "required": true + }, + "tool_name": { + "type": ["string", "null"], + "description": "Do not use." + }, + "display_name": { + "type": ["string", "null"], + "description": "Do not use." + }, + "description": { + "type": ["string", "null"], + "description": "Do not use." + }, + "example_input": { + "type": ["object", "null"], + "description": "Do not use." + }, + "tenant_id": { + "type": "string", + "format": "uuid", + "description": "ID of the tenant/workspace of the project.", + "required": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp of when the project was created.", + "required": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp of when the project was updated.", + "required": true + }, + "name": { + "type": "string", + "description": "Name of the project.\n\nThis is also the name of the LangSmith tracing project for the LangGraph deployment.", + "required": true + }, + "lc_hosted": { + "type": "boolean", + "description": "Boolean flag to indicate if the deployment is hosted in LangChain's cloud or an external cloud (e.g. BYOC).", + "required": true + }, + "repo_url": { + "type": ["string", "null"], + "description": "URL of the GitHub repository.\n\nThis field is not used for deployments from a Docker image." + }, + "repo_branch": { + "type": ["string", "null"], + "description": "Branch of the GitHub repository.\n\nThis field is not used for deployments from a Docker image." + }, + "tracer_session_id": { + "type": ["string", "null"], + "format": "uuid", + "description": "Do not use." + }, + "api_key_id": { + "type": ["string", "null"], + "format": "uuid", + "description": "Do not use." + }, + "build_on_push": { + "type": "boolean", + "description": "Boolean flag to indicate if a new revision is automatically created on push to GitHub branch (`repo_branch`).\n\nThis field does not apply for BYOC deployments." + }, + "input_json_schemas": { + "type": ["object", "null"], + "description": "Do not use." + }, + "output_json_schemas": { + "type": ["object", "null"], + "description": "Do not use." + }, + "host_integration_id": { + "type": ["string", "null"], + "format": "uuid", + "description": "Do not use." + }, + "metadata": { + "$ref": "#/components/schemas/ProjectMetadata" + }, + "resource": { + "$ref": "#/components/schemas/ResourceService" + } + } + }, + "ProjectMetadata": { + "type": "object", + "description": "Metadata associated with a `Project`.", + "properties": { + "deployment_type": { + "type": "string", + "description": "Development (`dev`) or Production (`prod`) type deployment.", + "enum": [ + "dev", + "prod" + ] + }, + "image_source": { + "type": "string", + "description": "Do not use.", + "enum": [ + "github", + "internal_docker", + "external_docker" + ] + }, + "shareable": { + "type": "boolean", + "description": "Boolean flag to configure if a deployment is shareable through LangGraph Studio.\n\nThis field does not apply to BYOC deployments." + }, + "region": { + "type": "string", + "description": "Region of deployment.\n\nRegion value is cloud provider specific." + }, + "aws_account_id": { + "type": "string", + "description": "AWS account ID of BYOC deployment.\n\nThis field does not apply to non-BYOC deployments." + }, + "aws_external_id": { + "type": "string", + "description": "Do not use." + } + } + }, + "ResourceId": { + "type": "object", + "description": "Internal identifier for a `ResourceRevision` or `ResourceService`.", + "properties": { + "type": { + "type": "string", + "enum": [ + "revisions", + "services" + ] + }, + "name": { + "type": "string" + } + } + }, + "ResourceRevision": { + "type": "object", + "description": "Internal revision resource for a `ResourceService`.", + "properties": { + "id": { + "$ref": "#/components/schemas/ResourceId" + }, + "env_vars": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EnvVar" + } + }, + "hosted_langserve_revision_id": { + "type": "string", + "format": "uuid", + "description": "References `id` of a `Revision`." + } + } + }, + "ResourceService": { + "type": "object", + "description": "Internal service resource for a `Project`.", + "properties": { + "id": { + "$ref": "#/components/schemas/ResourceId" + }, + "url": { + "type": ["string", "null"], + "description": "URL of LangGraph Server deployment." + }, + "latest_revision": { + "description": "References latest `ResourceRevision`.\n\nThe latest `ResourceRevision` may not be active if it's currently being deployed.", + "$ref": "#/components/schemas/ResourceRevision" + }, + "latest_active_revision": { + "description": "References latest active `ResourceRevision`.\n\nThe latest active `ResourceRevision` is not always the latest `ResourceRevision`.", + "$ref": "#/components/schemas/ResourceRevision" + } + } + }, + "Revision": { + "type": "object", + "description": "A revision is a version of a LangGraph Server deployment.\n\nDifferent revisions may contain different code and/or environment variables. A project can have many revisions.", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "ID of the revision.", + "required": true + }, + "project_id": { + "type": "string", + "format": "uuid", + "description": "References `id` of `Project`.", + "required": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp of when the revision was created.", + "required": true + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp of when the revision was updated.", + "required": true + }, + "repo_path": { + "type": ["string", "null"], + "description": "Path to `langgraph.json` configuration file. For example, `langgraph.json` or `src/langgraph.json`.\n\nThis field only applies to deployments from a GitHub repository.", + "default": "null" + }, + "repo_commit": { + "type": ["string", "null"], + "description": "Git branch name of deployment.\n\nThis field only applies to deployments from a GitHub repository.", + "default": "null" + }, + "status": { + "type": "string", + "enum": [ + "CREATING", + "AWAITING_BUILD", + "BUILDING", + "AWAITING_DEPLOY", + "DEPLOYING", + "CREATE_FAILED", + "BUILD_FAILED", + "DEPLOY_FAILED", + "DEPLOYED", + "INTERRUPTED", + "UNKNOWN" + ], + "description": "Deployment status of the revision.\n\nNon-terminal statuses: `CREATING`, `AWAITING_BUILD`, `BUILDING`, `AWAITING_DEPLOY`, `DEPLOYING`. All other statuses are terminal." + }, + "status_message": { + "type": "string", + "description": "Message associated with the `status`." + }, + "gcp_build_name": { + "type": ["string", "null"], + "description": "Do not use." + }, + "metadata": { + "$ref": "#/components/schemas/RevisionMetadata" + }, + "image_path": { + "type": ["string", "null"], + "description": "URI of the Docker image to deploy.\n\nThis field does not apply to deployments from a GitHub repository.", + "default": "null" + }, + "container_spec": { + "$ref": "#/components/schemas/ContainerSpec" + }, + "resource": { + "$ref": "#/components/schemas/ResourceRevision" + } + } + }, + "RevisionMetadata": { + "type": "object", + "description": "Metadata associated with a `Revision`.", + "properties": { + "created_by": { + "type": "object", + "description": "Do not use." + }, + "repo_commit_sha": { + "type": "string", + "description": "Git commit SHA of the deployment.\n\nThis field only applies to deployments from a GitHub repository." + } + } + } + } + } +} \ No newline at end of file