---
title: "Add a deployment adapter"
method: POST
path: "/projects/{projectId}/endpoints/{endpointId}/deployments/{deploymentId}/adapters"
tags: ["DeploymentService"]
---

# Add a deployment adapter

`POST /projects/{projectId}/endpoints/{endpointId}/deployments/{deploymentId}/adapters`

Attaches a LoRA adapter to a deployment. If the deployment is at adapter capacity, force can evict the oldest adapter.

## Path parameters

- `projectId` string, required — Project identifier.
- `endpointId` string, required — Endpoint identifier.
- `deploymentId` string, required — Deployment identifier.

## Request body

- DEAddAdapterRequest — Configuration for attaching a LoRA adapter to a deployment that has adapter loading enabled.
  - `adapterModelId` string, required — Adapter model identifier to attach.
  - `adapterRevisionId` string — Optional adapter revision to pin. If omitted, the latest revision is resolved at request time.
  - `force` boolean — Whether to evict the oldest adapter if the deployment is at adapter capacity.

## Response `200`

OK

- DEAdapterEntry — Adapter attached to a deployment with desired revision and observed load state.
  - `adapterModelId` string, required — Adapter model identifier attached to the deployment.
  - `desiredRevisionId` string, required — Adapter revision pinned on the deployment.
  - `perCluster` DEDeploymentAdapterStatus[], required — Per-cluster adapter load state reported by the controller.
    - `adapterModelId` string, required — Adapter model identifier for this status row.
    - `clusterId` string, required — Cluster reporting this adapter status.
    - `realizedRevisionId` string — Adapter revision currently loaded on pods in this cluster.
    - `realizedEtag` string — Adapter row etag observed by the controller when it wrote this status.
    - `state` 'ADAPTER_LOAD_STATE_PENDING' | 'ADAPTER_LOAD_STATE_LOADING' | 'ADAPTER_LOAD_STATE_READY' | 'ADAPTER_LOAD_STATE_REMOVING' | 'ADAPTER_LOAD_STATE_FAILED', required — Current adapter load state in this cluster.
    - `reason` string — Stable reason code for the current adapter state.
    - `message` string — Human-readable details about the current adapter state.
    - `readyPodCount` integer, required — Number of pods with the adapter ready to serve.
    - `failedPodCount` integer, required — Number of pods that failed to load the adapter.
    - `totalPodCount` integer, required — Total pods expected to report adapter load state.
    - `loadedAt` string, date-time — Time when the adapter first reached READY in this cluster.
    - `updatedAt` string, date-time — Time when this adapter status was last updated.
    - `adapterModel` string — Resource name of the adapter model, using projects/{projectId}/models/{adapterModelId}.
    - `realizedRevision` string — Resource name of the adapter model revision currently loaded in this cluster, using projects/{projectId}/models/{adapterModelId}/revisions/{revisionId}.
  - `etag` string, required — Row-level etag required for UpdateAdapter and RemoveAdapter.
  - `adapterModel` string — Resource name of the adapter model, using projects/{projectId}/models/{adapterModelId}.
  - `desiredRevision` string — Resource name of the adapter model revision pinned on the deployment, using projects/{projectId}/models/{adapterModelId}/revisions/{revisionId}.

## Other responses

- `default` — Default error response

---

[API](https://skmtc.net/together/apis/together-apis.md) · [All operations](https://skmtc.net/together/apis/together-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/together/together-apis/revisions/f26a23fab8e0/schema)
