> ## Documentation Index
> Fetch the complete documentation index at: https://docs.drssed.app/llms.txt
> Use this file to discover all available pages before exploring further.

# PATCH /outfits/{outfit_id} — Update outfit metadata

> Update outfit metadata or rearrange the canvas scene. All fields are optional — only send the fields you want to change in the request body.

Call `PATCH /outfits/{outfit_id}` to update an existing outfit. You can change the name, visibility, favorite status, seasons, tags, or the entire canvas scene. Only include the fields you want to modify — any field you omit remains unchanged. If you supply a new `scene`, it replaces the existing scene in full.

## Endpoint

| Field         | Value                  |
| ------------- | ---------------------- |
| Method        | `PATCH`                |
| Path          | `/outfits/{outfit_id}` |
| Auth required | Yes (Bearer token)     |
| Rate limit    | 3 per minute           |

## Path parameters

<ParamField path="outfit_id" type="string" required>
  The ID of the outfit to update.
</ParamField>

## Request body

All fields are optional. Include only the fields you want to change.

<ParamField body="name" type="string">
  New display name for the outfit.
</ParamField>

<ParamField body="is_public" type="boolean">
  Set to `true` to make the outfit visible to other users, or `false` to make it private.
</ParamField>

<ParamField body="is_favorite" type="boolean">
  Set to `true` to mark the outfit as a favorite, or `false` to remove the favorite status.
</ParamField>

<ParamField body="seasons" type="string[]">
  Replaces the current seasons list. Accepted values: `Spring`, `Summer`, `Autumn`, `Winter`.
</ParamField>

<ParamField body="tags" type="string[]">
  Replaces the current tags list. Accepted values: `Casual`, `Formal`, `Sports`, `Vintage`, `Outdoor`, `Party`, `Work`, `Beach`.
</ParamField>

<ParamField body="scene" type="object[]">
  Replaces the entire canvas scene. Provide an array of `CanvasPlacement` objects.

  <Expandable title="CanvasPlacement properties">
    <ParamField body="clothing_id" type="string" required>
      ID of the clothing item to place on the canvas.
    </ParamField>

    <ParamField body="x" type="number" required>
      Horizontal position of the item on the canvas.
    </ParamField>

    <ParamField body="y" type="number" required>
      Vertical position of the item on the canvas.
    </ParamField>

    <ParamField body="z" type="integer" required>
      Layer order. Items with a higher `z` value appear on top.
    </ParamField>

    <ParamField body="scale" type="number" required>
      Size multiplier relative to the item's default size.
    </ParamField>

    <ParamField body="rotation" type="number" required>
      Rotation of the item in degrees.
    </ParamField>
  </Expandable>
</ParamField>

## Response fields

**Status: 200 OK**

<ResponseField name="item" type="object" required>
  The updated outfit object.

  <Expandable title="Outfit object properties">
    <ResponseField name="outfit_id" type="string" required>
      Unique identifier for the outfit.
    </ResponseField>

    <ResponseField name="user_id" type="string" required>
      ID of the user who owns this outfit.
    </ResponseField>

    <ResponseField name="name" type="string" required>
      Display name of the outfit.
    </ResponseField>

    <ResponseField name="description" type="string">
      Optional description of the outfit.
    </ResponseField>

    <ResponseField name="is_public" type="boolean" required>
      Whether the outfit is visible to other users.
    </ResponseField>

    <ResponseField name="is_favorite" type="boolean" required>
      Whether the outfit is marked as a favorite.
    </ResponseField>

    <ResponseField name="seasons" type="string[]">
      Seasons assigned to the outfit.
    </ResponseField>

    <ResponseField name="tags" type="string[]">
      Style tags assigned to the outfit.
    </ResponseField>

    <ResponseField name="scene" type="object[]">
      The current canvas scene after the update.
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      ISO 8601 timestamp of when the outfit was created.
    </ResponseField>

    <ResponseField name="updated_at" type="string" required>
      ISO 8601 timestamp of when the outfit was last updated.
    </ResponseField>
  </Expandable>
</ResponseField>

## Example

```bash cURL theme={null}
curl --request PATCH \
  --url https://api.drssed.com/outfits/otf_abc123 \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Weekend Brunch (Updated)",
    "is_favorite": true,
    "tags": ["Casual", "Outdoor"]
  }'
```

```json Response theme={null}
{
  "item": {
    "outfit_id": "otf_abc123",
    "user_id": "usr_xyz789",
    "name": "Weekend Brunch (Updated)",
    "description": "Relaxed but put-together.",
    "is_public": true,
    "is_favorite": true,
    "seasons": ["Spring", "Summer"],
    "tags": ["Casual", "Outdoor"],
    "scene": [
      {
        "clothing_id": "clth_shirt_001",
        "x": 0.5,
        "y": 0.3,
        "z": 2,
        "scale": 1.0,
        "rotation": 0.0
      }
    ],
    "created_at": "2024-06-20T14:00:00+00:00",
    "updated_at": "2024-06-21T09:45:00+00:00"
  }
}
```

<Note>
  This endpoint is rate limited to 3 requests per minute — lower than other outfit endpoints. If you need to make several updates in quick succession, batch your changes into a single request where possible.
</Note>
