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

# Features

> Access detected entities within blocks — rooms, doors, symbols, dimensions, and more.

Features are entities detected inside [Blocks](/cms-api/resources/blocks) — rooms, doors, symbols, walls, dimensions, and annotations. They form a containment tree via `parent_feature_id` and connect to other entities via [Relations](/guides/concepts/relations). See [Features](/guides/concepts/features) for the full concept.

## Endpoints

| Method | Endpoint                                  | Description         |
| ------ | ----------------------------------------- | ------------------- |
| `GET`  | [`/features`](/cms-api/features/list)     | List features       |
| `GET`  | [`/features/{id}`](/cms-api/features/get) | Get feature details |

<Note>
  Features are read-only. They are created automatically during block processing.
</Note>

## Feature Object

| Field               | Type     | Description                                                      |
| ------------------- | -------- | ---------------------------------------------------------------- |
| `id`                | string   | Unique identifier (e.g., `ftr_01JABCD123`)                       |
| `block_id`          | string   | Parent [Block](/cms-api/resources/blocks)                        |
| `parent_feature_id` | string?  | Containment parent feature (null = direct child of block)        |
| `type`              | string   | Entity type: `"room"`, `"door"`, `"wall"`, `"duplex_receptacle"` |
| `label`             | string?  | Instance identifier: `"201"`, `"104"`, `"AHU-1"`                 |
| `bounds`            | object?  | Geometry within the block (see below)                            |
| `confidence`        | float?   | Detection confidence score (0-1)                                 |
| `uri`               | string?  | Cropped image URL                                                |
| `ocr`               | string?  | Extracted text content                                           |
| `description`       | string?  | Human/LLM-readable summary                                       |
| `metadata`          | object?  | Domain-specific properties                                       |
| `created_at`        | datetime | Creation timestamp                                               |
| `updated_at`        | datetime | Last update timestamp                                            |

## Bounds Geometry

The `bounds` field stores the feature's geometry within its parent block. A `type` discriminator determines the shape:

| Geometry   | Used for                  | Shape                        |
| ---------- | ------------------------- | ---------------------------- |
| `bbox`     | Symbols, equipment, doors | Axis-aligned bounding box    |
| `polygon`  | Rooms, areas              | Closed polygon with vertices |
| `polyline` | Walls, ducts, pipes       | Open line with vertices      |

```json theme={null}
// bbox — a door symbol
{ "type": "bbox", "xmin": 450, "ymin": 320, "xmax": 480, "ymax": 350 }

// polygon — a room boundary
{ "type": "polygon", "points": [[100, 200], [300, 200], [300, 500], [100, 500]] }

// polyline — a wall segment
{ "type": "polyline", "points": [[100, 200], [300, 200], [300, 500]] }
```

<Tip>
  All coordinates are **normalized** (0-1000) within the parent block's image. This makes them resolution-independent.
</Tip>

## Feature Metadata

The `metadata` JSON field carries domain-specific properties, standardized by convention:

| Key                | Used on                   | Example                |
| ------------------ | ------------------------- | ---------------------- |
| `fire_rating`      | Walls, doors              | `2-hr`, `45-min`       |
| `elevation`        | Beams, ducts, equipment   | `112'-6`               |
| `elevation_top`    | Beams, structural members | `112'-6`               |
| `elevation_bottom` | Beams, structural members | `111'-2`               |
| `material`         | Walls, doors              | `HM`, `WD`, `concrete` |
| `size`             | Ducts, pipes              | `24x12`, `4`           |
| `assembly`         | Walls                     | `UL U419`              |
| `system`           | MEP elements              | `CHW`, `SAN`, `SD`     |
| `designation`      | Structural members        | `W16x40`               |

### Symbol Instance Metadata

Detected symbol instances (from the [symbol detection pipeline](/vision-api/parse/symbol-detection)) carry matching metadata:

| Key                   | Type  | Description                                                       |
| --------------------- | ----- | ----------------------------------------------------------------- |
| `scale`               | float | Template scale factor relative to legend crop (0.4 - 1.3)         |
| `angle`               | int   | Rotation angle in degrees: 0, 45, 90, 135, 180, 225, 270, 315     |
| `flipped`             | bool  | Whether the instance is vertically flipped relative to the legend |
| `template_confidence` | float | Raw template matching score before embedding verification         |
| `dinov2_score`        | float | Embedding similarity score from DINOv2 verification               |

The `confidence` field on symbol features is a hybrid score: `template_confidence * dinov2_score`. Both component scores are preserved in metadata for downstream filtering.

```json theme={null}
{
  "type": "symbol",
  "label": "duplex_receptacle",
  "confidence": 0.82,
  "bounds": { "type": "bbox", "xmin": 450, "ymin": 320, "xmax": 480, "ymax": 350 },
  "metadata": {
    "scale": 0.88,
    "angle": 90,
    "flipped": false,
    "template_confidence": 0.91,
    "dinov2_score": 0.90
  }
}
```

### Legend Feature Metadata

Legend entry features (from `parse_legend`) carry symbol definition metadata:

| Key            | Type    | Description                                                              |
| -------------- | ------- | ------------------------------------------------------------------------ |
| `is_text_only` | bool    | True if the symbol is text-only with no graphic shape                    |
| `has_text`     | bool    | True if the symbol graphic contains text characters                      |
| `symmetrical`  | bool    | True if the graphic is symmetric along either axis                       |
| `is_suffix`    | bool    | True if this entry is a suffix designation (e.g., "WP" for weatherproof) |
| `suffix`       | string? | The suffix letter(s) when `is_suffix` is true                            |

Text-only legend entries are not template-matched against plan blocks.

## Type Vocabulary

`type` is a free string — the vocabulary of construction entities is too large for an enum. Common types include:

| Category        | Types                                                                                        |
| --------------- | -------------------------------------------------------------------------------------------- |
| Architectural   | `room`, `door`, `wall`, `window`, `column`, `stair`                                          |
| Electrical      | `duplex_receptacle`, `gfci_receptacle`, `switch`, `light_fixture`, `fire_alarm_pull_station` |
| Mechanical      | `duct`, `diffuser`, `ahu`, `vav_box`                                                         |
| Plumbing        | `pipe`, `fixture`, `floor_drain`                                                             |
| Structural      | `beam`, `joist`, `footing`                                                                   |
| Annotations     | `dimension`, `detail_callout`, `keynote`, `section_mark`                                     |
| Fire protection | `smoke_detector`, `sprinkler_head`, `fire_extinguisher`                                      |
