# Deployments

## Create Deployment

`agents.deployments.create(stragent_id, DeploymentCreateParams**kwargs)  -> DeploymentCreateResponse`

**post** `/agents/{agent_id}/deployments`

Create a new deployment record in PENDING status.

### Parameters

- `agent_id: str`

- `docker_image: str`

  Full Docker image URI.

- `helm_release_name: Optional[str]`

  Helm release name.

- `registration_metadata: Optional[Dict[str, object]]`

  Git/build metadata (commit_hash, branch_name, author_name, author_email, build_timestamp).

- `sgp_deploy_id: Optional[str]`

  SGP deployment ID.

### Returns

- `class DeploymentCreateResponse: …`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.

### Example

```python
import os
from agentex import Agentex

client = Agentex(
    api_key=os.environ.get("AGENTEX_SDK_API_KEY"),  # This is the default and can be omitted
)
deployment = client.agents.deployments.create(
    agent_id="agent_id",
    docker_image="docker_image",
)
print(deployment.id)
```

#### Response

```json
{
  "id": "id",
  "agent_id": "agent_id",
  "docker_image": "docker_image",
  "is_production": true,
  "status": "Pending",
  "acp_url": "acp_url",
  "created_at": "2019-12-27T18:11:19.117Z",
  "expires_at": "2019-12-27T18:11:19.117Z",
  "helm_release_name": "helm_release_name",
  "promoted_at": "2019-12-27T18:11:19.117Z",
  "registration_metadata": {
    "foo": "bar"
  },
  "sgp_deploy_id": "sgp_deploy_id"
}
```

## List Deployments

`agents.deployments.list(stragent_id, DeploymentListParams**kwargs)  -> DeploymentListResponse`

**get** `/agents/{agent_id}/deployments`

List deployments for an agent, newest first.

### Parameters

- `agent_id: str`

- `limit: Optional[int]`

  Limit

- `order_by: Optional[str]`

  Field to order by

- `order_direction: Optional[str]`

  Order direction (asc or desc)

- `page_number: Optional[int]`

  Page number

### Returns

- `List[DeploymentListResponseItem]`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.

### Example

```python
import os
from agentex import Agentex

client = Agentex(
    api_key=os.environ.get("AGENTEX_SDK_API_KEY"),  # This is the default and can be omitted
)
deployments = client.agents.deployments.list(
    agent_id="agent_id",
)
print(deployments)
```

#### Response

```json
[
  {
    "id": "id",
    "agent_id": "agent_id",
    "docker_image": "docker_image",
    "is_production": true,
    "status": "Pending",
    "acp_url": "acp_url",
    "created_at": "2019-12-27T18:11:19.117Z",
    "expires_at": "2019-12-27T18:11:19.117Z",
    "helm_release_name": "helm_release_name",
    "promoted_at": "2019-12-27T18:11:19.117Z",
    "registration_metadata": {
      "foo": "bar"
    },
    "sgp_deploy_id": "sgp_deploy_id"
  }
]
```

## Get Deployment

`agents.deployments.retrieve(strdeployment_id, DeploymentRetrieveParams**kwargs)  -> DeploymentRetrieveResponse`

**get** `/agents/{agent_id}/deployments/{deployment_id}`

Get a specific deployment by ID.

### Parameters

- `agent_id: str`

- `deployment_id: str`

### Returns

- `class DeploymentRetrieveResponse: …`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.

### Example

```python
import os
from agentex import Agentex

client = Agentex(
    api_key=os.environ.get("AGENTEX_SDK_API_KEY"),  # This is the default and can be omitted
)
deployment = client.agents.deployments.retrieve(
    deployment_id="deployment_id",
    agent_id="agent_id",
)
print(deployment.id)
```

#### Response

```json
{
  "id": "id",
  "agent_id": "agent_id",
  "docker_image": "docker_image",
  "is_production": true,
  "status": "Pending",
  "acp_url": "acp_url",
  "created_at": "2019-12-27T18:11:19.117Z",
  "expires_at": "2019-12-27T18:11:19.117Z",
  "helm_release_name": "helm_release_name",
  "promoted_at": "2019-12-27T18:11:19.117Z",
  "registration_metadata": {
    "foo": "bar"
  },
  "sgp_deploy_id": "sgp_deploy_id"
}
```

## Delete Deployment

`agents.deployments.delete(strdeployment_id, DeploymentDeleteParams**kwargs)  -> DeleteResponse`

**delete** `/agents/{agent_id}/deployments/{deployment_id}`

Delete a non-production deployment.

### Parameters

- `agent_id: str`

- `deployment_id: str`

### Returns

- `class DeleteResponse: …`

  - `id: str`

  - `message: str`

### Example

```python
import os
from agentex import Agentex

client = Agentex(
    api_key=os.environ.get("AGENTEX_SDK_API_KEY"),  # This is the default and can be omitted
)
delete_response = client.agents.deployments.delete(
    deployment_id="deployment_id",
    agent_id="agent_id",
)
print(delete_response.id)
```

#### Response

```json
{
  "id": "id",
  "message": "message"
}
```

## Promote Deployment

`agents.deployments.promote(strdeployment_id, DeploymentPromoteParams**kwargs)  -> DeploymentPromoteResponse`

**post** `/agents/{agent_id}/deployments/{deployment_id}/promote`

Promote a deployment to production with atomic cutover.

### Parameters

- `agent_id: str`

- `deployment_id: str`

### Returns

- `class DeploymentPromoteResponse: …`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.

### Example

```python
import os
from agentex import Agentex

client = Agentex(
    api_key=os.environ.get("AGENTEX_SDK_API_KEY"),  # This is the default and can be omitted
)
response = client.agents.deployments.promote(
    deployment_id="deployment_id",
    agent_id="agent_id",
)
print(response.id)
```

#### Response

```json
{
  "id": "id",
  "agent_id": "agent_id",
  "docker_image": "docker_image",
  "is_production": true,
  "status": "Pending",
  "acp_url": "acp_url",
  "created_at": "2019-12-27T18:11:19.117Z",
  "expires_at": "2019-12-27T18:11:19.117Z",
  "helm_release_name": "helm_release_name",
  "promoted_at": "2019-12-27T18:11:19.117Z",
  "registration_metadata": {
    "foo": "bar"
  },
  "sgp_deploy_id": "sgp_deploy_id"
}
```

## Preview RPC

`agents.deployments.preview_rpc(strdeployment_id, DeploymentPreviewRpcParams**kwargs)  -> AgentRpcResponse`

**post** `/agents/{agent_id}/deployments/{deployment_id}/rpc`

Send an RPC request to a specific deployment (for preview testing).

### Parameters

- `agent_id: str`

- `deployment_id: str`

- `method: Literal["event/send", "task/create", "message/send", 2 more]`

  - `"event/send"`

  - `"task/create"`

  - `"message/send"`

  - `"task/cancel"`

  - `"task/interrupt"`

- `params: Params`

  The parameters for the agent RPC request

  - `class ParamsCreateTaskRequest: …`

    - `name: Optional[str]`

      Optional human-readable name for the task. When set it must be globally unique. task/create is get-or-create by name: reusing an existing name returns the existing task (with its prior history) instead of creating a new one, so omit name (or make it unique, e.g. by appending a UUID) whenever each call should produce a fresh task.

    - `params: Optional[Dict[str, object]]`

      The parameters for the task. On a get-or-create by name, providing params overwrites the existing task's params (it is not a pure read).

    - `task_metadata: Optional[Dict[str, object]]`

      Caller-provided metadata to persist on the task row. Only applied at task creation; ignored if a task with this name already exists. Forwarded to the agent inside the ACP payload for backward compatibility.

  - `class ParamsCancelTaskRequest: …`

    - `task_id: Optional[str]`

      The ID of the task to cancel. Either this or task_name must be provided.

    - `task_name: Optional[str]`

      The name of the task to cancel. Either this or task_id must be provided.

  - `class ParamsInterruptTaskRequest: …`

    - `task_id: Optional[str]`

      The ID of the task to interrupt. Either this or task_name must be provided.

    - `task_name: Optional[str]`

      The name of the task to interrupt. Either this or task_id must be provided.

  - `class ParamsSendMessageRequest: …`

    - `content: TaskMessageContentParam`

      The message that was sent to the agent

      - `class TextContent: …`

        - `author: MessageAuthor`

          The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

          - `"user"`

          - `"agent"`

        - `content: str`

          The contents of the text message.

        - `attachments: Optional[List[Attachment]]`

          Optional list of file attachments with structured metadata.

          - `file_id: str`

            The unique ID of the attached file

          - `name: str`

            The name of the file

          - `size: int`

            The size of the file in bytes

          - `type: str`

            The MIME type or content type of the file

        - `format: Optional[TextFormat]`

          The format of the message. This is used by the client to determine how to display the message.

          - `"markdown"`

          - `"plain"`

          - `"code"`

        - `style: Optional[MessageStyle]`

          The style of the message. This is used by the client to determine how to display the message.

          - `"static"`

          - `"active"`

        - `type: Optional[Literal["text"]]`

          The type of the message, in this case `text`.

          - `"text"`

      - `class ReasoningContent: …`

        - `author: MessageAuthor`

          The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

        - `summary: List[str]`

          A list of short reasoning summaries

        - `content: Optional[List[str]]`

          The reasoning content or chain-of-thought text

        - `style: Optional[MessageStyle]`

          The style of the message. This is used by the client to determine how to display the message.

        - `type: Optional[Literal["reasoning"]]`

          The type of the message, in this case `reasoning`.

          - `"reasoning"`

      - `class DataContent: …`

        - `author: MessageAuthor`

          The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

        - `data: Dict[str, object]`

          The contents of the data message.

        - `style: Optional[MessageStyle]`

          The style of the message. This is used by the client to determine how to display the message.

        - `type: Optional[Literal["data"]]`

          The type of the message, in this case `data`.

          - `"data"`

      - `class ToolRequestContent: …`

        - `arguments: Dict[str, object]`

          The arguments to the tool.

        - `author: MessageAuthor`

          The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

        - `name: str`

          The name of the tool that is being requested.

        - `tool_call_id: str`

          The ID of the tool call that is being requested.

        - `style: Optional[MessageStyle]`

          The style of the message. This is used by the client to determine how to display the message.

        - `type: Optional[Literal["tool_request"]]`

          The type of the message, in this case `tool_request`.

          - `"tool_request"`

      - `class ToolResponseContent: …`

        - `author: MessageAuthor`

          The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

        - `content: object`

          The result of the tool.

        - `name: str`

          The name of the tool that is being responded to.

        - `tool_call_id: str`

          The ID of the tool call that is being responded to.

        - `is_error: Optional[bool]`

          Whether the tool call resulted in an error. `None` when the harness does not report a status.

        - `style: Optional[MessageStyle]`

          The style of the message. This is used by the client to determine how to display the message.

        - `type: Optional[Literal["tool_response"]]`

          The type of the message, in this case `tool_response`.

          - `"tool_response"`

    - `stream: Optional[bool]`

      Whether to stream the response message back to the client

    - `task_id: Optional[str]`

      The ID of the task that the message was sent to

    - `task_name: Optional[str]`

      The name of the task that the message was sent to

    - `task_params: Optional[Dict[str, object]]`

      The parameters for the task (only used when creating new tasks)

  - `class ParamsSendEventRequest: …`

    - `content: Optional[TaskMessageContentParam]`

      The content to send to the event

    - `task_id: Optional[str]`

      The ID of the task that the event was sent to

    - `task_name: Optional[str]`

      The name of the task that the event was sent to

- `id: Optional[Union[int, str, null]]`

  - `int`

  - `str`

- `jsonrpc: Optional[Literal["2.0"]]`

  - `"2.0"`

### Returns

- `class AgentRpcResponse: …`

  - `result: Optional[AgentRpcResult]`

    The result of the agent RPC request

    - `List[TaskMessage]`

      - `content: TaskMessageContent`

        The content of the message. This content is not OpenAI compatible. These are messages that are meant to be displayed to the user.

        - `class TextContent: …`

          - `author: MessageAuthor`

            The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

            - `"user"`

            - `"agent"`

          - `content: str`

            The contents of the text message.

          - `attachments: Optional[List[Attachment]]`

            Optional list of file attachments with structured metadata.

            - `file_id: str`

              The unique ID of the attached file

            - `name: str`

              The name of the file

            - `size: int`

              The size of the file in bytes

            - `type: str`

              The MIME type or content type of the file

          - `format: Optional[TextFormat]`

            The format of the message. This is used by the client to determine how to display the message.

            - `"markdown"`

            - `"plain"`

            - `"code"`

          - `style: Optional[MessageStyle]`

            The style of the message. This is used by the client to determine how to display the message.

            - `"static"`

            - `"active"`

          - `type: Optional[Literal["text"]]`

            The type of the message, in this case `text`.

            - `"text"`

        - `class ReasoningContent: …`

          - `author: MessageAuthor`

            The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

          - `summary: List[str]`

            A list of short reasoning summaries

          - `content: Optional[List[str]]`

            The reasoning content or chain-of-thought text

          - `style: Optional[MessageStyle]`

            The style of the message. This is used by the client to determine how to display the message.

          - `type: Optional[Literal["reasoning"]]`

            The type of the message, in this case `reasoning`.

            - `"reasoning"`

        - `class DataContent: …`

          - `author: MessageAuthor`

            The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

          - `data: Dict[str, object]`

            The contents of the data message.

          - `style: Optional[MessageStyle]`

            The style of the message. This is used by the client to determine how to display the message.

          - `type: Optional[Literal["data"]]`

            The type of the message, in this case `data`.

            - `"data"`

        - `class ToolRequestContent: …`

          - `arguments: Dict[str, object]`

            The arguments to the tool.

          - `author: MessageAuthor`

            The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

          - `name: str`

            The name of the tool that is being requested.

          - `tool_call_id: str`

            The ID of the tool call that is being requested.

          - `style: Optional[MessageStyle]`

            The style of the message. This is used by the client to determine how to display the message.

          - `type: Optional[Literal["tool_request"]]`

            The type of the message, in this case `tool_request`.

            - `"tool_request"`

        - `class ToolResponseContent: …`

          - `author: MessageAuthor`

            The role of the messages author, in this case `system`, `user`, `assistant`, or `tool`.

          - `content: object`

            The result of the tool.

          - `name: str`

            The name of the tool that is being responded to.

          - `tool_call_id: str`

            The ID of the tool call that is being responded to.

          - `is_error: Optional[bool]`

            Whether the tool call resulted in an error. `None` when the harness does not report a status.

          - `style: Optional[MessageStyle]`

            The style of the message. This is used by the client to determine how to display the message.

          - `type: Optional[Literal["tool_response"]]`

            The type of the message, in this case `tool_response`.

            - `"tool_response"`

      - `task_id: str`

        ID of the task this message belongs to

      - `id: Optional[str]`

        The task message's unique id

      - `created_at: Optional[datetime]`

        The timestamp when the message was created

      - `streaming_status: Optional[Literal["IN_PROGRESS", "DONE"]]`

        - `"IN_PROGRESS"`

        - `"DONE"`

      - `updated_at: Optional[datetime]`

        The timestamp when the message was last updated

    - `class StreamTaskMessageStart: …`

      Event for starting a streaming message

      - `content: TaskMessageContent`

      - `index: Optional[int]`

      - `parent_task_message: Optional[TaskMessage]`

        Represents a message in the agent system.

        This entity is used to store messages in MongoDB, with each message
        associated with a specific task.

        - `content: TaskMessageContent`

          The content of the message. This content is not OpenAI compatible. These are messages that are meant to be displayed to the user.

        - `task_id: str`

          ID of the task this message belongs to

        - `id: Optional[str]`

          The task message's unique id

        - `created_at: Optional[datetime]`

          The timestamp when the message was created

        - `streaming_status: Optional[Literal["IN_PROGRESS", "DONE"]]`

        - `updated_at: Optional[datetime]`

          The timestamp when the message was last updated

      - `type: Optional[Literal["start"]]`

        - `"start"`

    - `class StreamTaskMessageDelta: …`

      Event for streaming chunks of content

      - `delta: Optional[TaskMessageDelta]`

        Delta for text updates

        - `class TextDelta: …`

          Delta for text updates

          - `text_delta: Optional[str]`

          - `type: Optional[Literal["text"]]`

            - `"text"`

        - `class DataDelta: …`

          Delta for data updates

          - `data_delta: Optional[str]`

          - `type: Optional[Literal["data"]]`

            - `"data"`

        - `class ToolRequestDelta: …`

          Delta for tool request updates

          - `name: str`

          - `tool_call_id: str`

          - `arguments_delta: Optional[str]`

          - `type: Optional[Literal["tool_request"]]`

            - `"tool_request"`

        - `class ToolResponseDelta: …`

          Delta for tool response updates

          - `name: str`

          - `tool_call_id: str`

          - `content_delta: Optional[str]`

          - `type: Optional[Literal["tool_response"]]`

            - `"tool_response"`

        - `class ReasoningSummaryDelta: …`

          Delta for reasoning summary updates

          - `summary_index: int`

          - `summary_delta: Optional[str]`

          - `type: Optional[Literal["reasoning_summary"]]`

            - `"reasoning_summary"`

        - `class ReasoningContentDelta: …`

          Delta for reasoning content updates

          - `content_index: int`

          - `content_delta: Optional[str]`

          - `type: Optional[Literal["reasoning_content"]]`

            - `"reasoning_content"`

      - `index: Optional[int]`

      - `parent_task_message: Optional[TaskMessage]`

        Represents a message in the agent system.

        This entity is used to store messages in MongoDB, with each message
        associated with a specific task.

      - `type: Optional[Literal["delta"]]`

        - `"delta"`

    - `class StreamTaskMessageFull: …`

      Event for streaming the full content

      - `content: TaskMessageContent`

      - `index: Optional[int]`

      - `parent_task_message: Optional[TaskMessage]`

        Represents a message in the agent system.

        This entity is used to store messages in MongoDB, with each message
        associated with a specific task.

      - `type: Optional[Literal["full"]]`

        - `"full"`

    - `class StreamTaskMessageDone: …`

      Event for indicating the task is done

      - `index: Optional[int]`

      - `parent_task_message: Optional[TaskMessage]`

        Represents a message in the agent system.

        This entity is used to store messages in MongoDB, with each message
        associated with a specific task.

      - `type: Optional[Literal["done"]]`

        - `"done"`

    - `class Task: …`

      - `id: str`

      - `cleaned_at: Optional[datetime]`

      - `created_at: Optional[datetime]`

      - `name: Optional[str]`

      - `params: Optional[Dict[str, object]]`

      - `status: Optional[Literal["CANCELED", "COMPLETED", "FAILED", 5 more]]`

        - `"CANCELED"`

        - `"COMPLETED"`

        - `"FAILED"`

        - `"RUNNING"`

        - `"INTERRUPTED"`

        - `"TERMINATED"`

        - `"TIMED_OUT"`

        - `"DELETED"`

      - `status_reason: Optional[str]`

      - `task_metadata: Optional[Dict[str, object]]`

      - `updated_at: Optional[datetime]`

    - `class Event: …`

      - `id: str`

        The UUID of the event

      - `agent_id: str`

        The UUID of the agent that the event belongs to

      - `sequence_id: int`

        The sequence ID of the event

      - `task_id: str`

        The UUID of the task that the event belongs to

      - `content: Optional[TaskMessageContent]`

        The content of the event

      - `created_at: Optional[datetime]`

        The timestamp of the event

  - `id: Optional[Union[int, str, null]]`

    - `int`

    - `str`

  - `error: Optional[object]`

  - `jsonrpc: Optional[Literal["2.0"]]`

    - `"2.0"`

### Example

```python
import os
from agentex import Agentex

client = Agentex(
    api_key=os.environ.get("AGENTEX_SDK_API_KEY"),  # This is the default and can be omitted
)
agent_rpc_response = client.agents.deployments.preview_rpc(
    deployment_id="deployment_id",
    agent_id="agent_id",
    method="event/send",
    params={},
)
print(agent_rpc_response.id)
```

#### Response

```json
{
  "result": [
    {
      "content": {
        "author": "user",
        "content": "content",
        "attachments": [
          {
            "file_id": "file_id",
            "name": "name",
            "size": 0,
            "type": "type"
          }
        ],
        "format": "markdown",
        "style": "static",
        "type": "text"
      },
      "task_id": "task_id",
      "id": "id",
      "created_at": "2019-12-27T18:11:19.117Z",
      "streaming_status": "IN_PROGRESS",
      "updated_at": "2019-12-27T18:11:19.117Z"
    }
  ],
  "id": 0,
  "error": {},
  "jsonrpc": "2.0"
}
```

## Domain Types

### Deployment Create Response

- `class DeploymentCreateResponse: …`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.

### Deployment List Response

- `List[DeploymentListResponseItem]`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.

### Deployment Retrieve Response

- `class DeploymentRetrieveResponse: …`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.

### Deployment Promote Response

- `class DeploymentPromoteResponse: …`

  - `id: str`

    The unique identifier of the deployment.

  - `agent_id: str`

    The agent this deployment belongs to.

  - `docker_image: str`

    Full Docker image URI.

  - `is_production: bool`

    Whether this is the production deployment.

  - `status: Literal["Pending", "Ready", "Failed"]`

    Current deployment status.

    - `"Pending"`

    - `"Ready"`

    - `"Failed"`

  - `acp_url: Optional[str]`

    ACP URL set when agent registers.

  - `created_at: Optional[datetime]`

    When the deployment was created.

  - `expires_at: Optional[datetime]`

    When marked for cleanup.

  - `helm_release_name: Optional[str]`

    Helm release name for cleanup.

  - `promoted_at: Optional[datetime]`

    When promoted to production.

  - `registration_metadata: Optional[Dict[str, object]]`

    Git/build metadata from the agent pod.

  - `sgp_deploy_id: Optional[str]`

    Correlates to SGP's agentex_deploys.id.
