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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.