---
title: "Update a shadow experiment target"
method: PATCH
path: "/projects/{projectId}/endpoints/{endpointId}/shadowExperiments/{experimentId}/targets/{id}"
tags: ["ShadowExperimentService"]
---

# Update a shadow experiment target

`PATCH /projects/{projectId}/endpoints/{endpointId}/shadowExperiments/{experimentId}/targets/{id}`

Updates a shadow target's name, deployment, or description. `updateMask` is required and must select at least one mutable field.

## Path parameters

- `projectId` string, required — Project identifier.
- `endpointId` string, required — Endpoint identifier.
- `experimentId` string, required — Shadow experiment identifier.
- `id` string, required — Shadow experiment target identifier.

## Query parameters

- `updateMask` string, required — Comma-separated fields to update. Supported fields are `name`, `targetDeploymentId`, and `description`.

## Request body

- DEUpdateShadowExperimentTargetRequest — Mutable name, deployment, and description for a shadow experiment target.
  - `name` string — Updated human-readable target name.
  - `targetDeploymentId` string — Replacement deployment under the parent endpoint. It must not be a live traffic-split member or the source or target of an active rollout; traffic-split weight 0 warm-up targets are allowed.
  - `description` string — Updated free-form target description.
  - `etag` string — Opaque version tag from a prior read for optimistic concurrency.

## Response `200`

OK

- DEShadowExperimentTarget — Deployment that receives mirrored traffic for a shadow experiment.
  - `id` string, required — Output only. Unique shadow experiment target identifier.
  - `experimentId` string, required — Output only. Shadow experiment this target belongs to.
  - `name` string, required — Human-readable target name, unique within the shadow experiment. At most 256 characters.
  - `targetDeploymentId` string, required — Deployment under the parent endpoint that receives mirrored traffic. It must not be a live traffic-split member or the source or target of an active rollout; traffic-split weight 0 warm-up targets are allowed.
  - `description` string — Optional free-form target description.
  - `createdAt` string, date-time, required — Output only. Timestamp when the target was created.
  - `updatedAt` string, date-time, required — Output only. Timestamp when the target was last updated.
  - `etag` string, required — Opaque version tag for optimistic concurrency control. Returned on read; set it on update or delete requests for consistent read-modify-write.

## Other responses

- `400` — Invalid request
- `default` — Default error response

## Changes

- **2026-07-26** `0c4fdad77435` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/together/apis/together-apis/changes/projects/:projectId/endpoints/:endpointId/shadowExperiments/:experimentId/targets/:id/patch.md)

---

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