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

# Update plant

> Update mutable fields on a plant. Only provided fields are touched.

```
PUT https://www.wiseyield.co/api/v1/farms/{id}/fields/{fieldId}/blocks/{blockId}/plants/{plantId}
```

### Authentication

Requires a key with the `fields:write` scope.

### Path parameters

<ParamField path="id" type="string" required>Farm UUID.</ParamField>
<ParamField path="fieldId" type="string" required>Field UUID.</ParamField>
<ParamField path="blockId" type="string" required>Block UUID.</ParamField>
<ParamField path="plantId" type="string" required>Plant UUID.</ParamField>

### Request body

All fields are optional. Only fields you include in the body are updated.

<ParamField body="label" type="string">1–100 characters.</ParamField>
<ParamField body="tagId" type="string">1–200 characters. Pass `null` to clear. Unique within the block.</ParamField>
<ParamField body="position" type="object">`{ lat, lng }`. Pass `null` to clear.</ParamField>
<ParamField body="plantedAt" type="string">ISO 8601. Pass `null` to clear.</ParamField>
<ParamField body="status" type="string">One of `alive`, `sick`, `dead`, `replaced`, `removed`.</ParamField>
<ParamField body="notes" type="string">Up to 2,000 characters. Pass `null` to clear.</ParamField>

### Response

Returns the updated plant wrapped under `data`.

<RequestExample>
  ```bash cURL theme={null}
  curl -X PUT 'https://www.wiseyield.co/api/v1/farms/11111111.../fields/88888888.../blocks/aaaaaaaa.../plants/ffffffff...' \
    -H "Authorization: Bearer $WISEYIELD_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "status": "sick", "notes": "Yellowing fronds — see pic 2026-05-17" }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "data": {
      "id": "ffffffff-1111-2222-3333-444444444444",
      "status": "sick",
      "notes": "Yellowing fronds — see pic 2026-05-17",
      "updatedAt": "2026-05-17T17:25:00.000Z"
    }
  }
  ```

  ```json 409 Tag conflict theme={null}
  {
    "error": "Conflict",
    "code": "CONFLICT",
    "message": "Tag ID \"QR-MDJ-0247\" is already assigned to another plant in this block"
  }
  ```
</ResponseExample>

## Errors

| Status                    | When                                                                  |
| ------------------------- | --------------------------------------------------------------------- |
| `400 INVALID_ID`          | Any path UUID is malformed                                            |
| `400 VALIDATION_ERROR`    | Body validation failed                                                |
| `401`                     | Missing, malformed, expired, or revoked API key                       |
| `403 INSUFFICIENT_SCOPE`  | Key lacks `fields:write` scope                                        |
| `404 NOT_FOUND`           | Farm, field, block, or plant doesn't exist or belongs to another user |
| `409 CONFLICT`            | `tagId` collision with another plant in the same block                |
| `429 RATE_LIMIT_EXCEEDED` | Per-user rate limit reached                                           |
| `5xx`                     | Server error                                                          |
