> ## 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.

# List plants in block

> List per-plant records under a block. Plants are the opt-in QR-tagged asset layer for premium perennials.

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

See [Land hierarchy](/concepts/land-hierarchy) for when per-plant tracking is worthwhile. Most blocks won't have plant records — populate them only when per-asset operations (pollination tracking, disease quarantine, GAP audit) matter.

### Authentication

Requires a key with the `fields:read` scope. See [Authentication](/authentication).

### 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>

### Response

<ResponseField name="data" type="array">
  Array of plant objects under the block. Soft-deleted plants are excluded.

  <Expandable title="Plant">
    <ResponseField name="id" type="string">UUID.</ResponseField>
    <ResponseField name="blockId" type="string">UUID of the parent block.</ResponseField>
    <ResponseField name="label" type="string">Within-block identifier (e.g. "Row 1, Tree 4" or "P-0001").</ResponseField>
    <ResponseField name="tagId" type="string | null">QR / RFID / barcode identifier. Unique within a block when set.</ResponseField>
    <ResponseField name="position" type="object | null">`{ lat: number, lng: number }`. GPS position of the individual plant.</ResponseField>
    <ResponseField name="plantedAt" type="string | null">ISO 8601.</ResponseField>
    <ResponseField name="status" type="string">One of `alive`, `sick`, `dead`, `replaced`, `removed`.</ResponseField>
    <ResponseField name="notes" type="string | null">Free text, up to 2,000 characters.</ResponseField>
    <ResponseField name="createdAt" type="string">ISO 8601.</ResponseField>
    <ResponseField name="updatedAt" type="string">ISO 8601.</ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl 'https://www.wiseyield.co/api/v1/farms/11111111.../fields/88888888.../blocks/aaaaaaaa.../plants' \
    -H "Authorization: Bearer $WISEYIELD_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const res = await fetch(
    `https://www.wiseyield.co/api/v1/farms/${farmId}/fields/${fieldId}/blocks/${blockId}/plants`,
    { headers: { Authorization: `Bearer ${process.env.WISEYIELD_API_KEY}` } }
  );
  const { data: plants } = await res.json();
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "data": [
      {
        "id": "ffffffff-1111-2222-3333-444444444444",
        "blockId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
        "label": "Row 1, Tree 4",
        "tagId": "QR-MDJ-0247",
        "position": { "lat": 30.0444, "lng": 31.2357 },
        "plantedAt": "2024-03-15T00:00:00.000Z",
        "status": "alive",
        "createdAt": "2024-03-15T08:00:00.000Z",
        "updatedAt": "2026-05-10T14:30:00.000Z"
      }
    ]
  }
  ```
</ResponseExample>

## Errors

| Status                    | When                                                           |
| ------------------------- | -------------------------------------------------------------- |
| `400 INVALID_ID`          | Any path UUID is malformed                                     |
| `401`                     | Missing, malformed, expired, or revoked API key                |
| `403 INSUFFICIENT_SCOPE`  | Key lacks `fields:read` scope                                  |
| `404 NOT_FOUND`           | Farm, field, or block doesn't exist or belongs to another user |
| `429 RATE_LIMIT_EXCEEDED` | Per-user rate limit reached                                    |
| `5xx`                     | Server error                                                   |
