---
title: "Property capability graph (raw signals and/or derived summaries)"
method: GET
path: "/properties/{property_id}/capabilities"
tags: ["Propertys"]
---

# Property capability graph (raw signals and/or derived summaries)

`GET /properties/{property_id}/capabilities`

## Request

- Base URL: `http://localhost:8000`
- URL: `http://localhost:8000/properties/{property_id}/capabilities`
- Auth: none declared

Read the capability graph for a single visible property.

Returns generic scoped records from the Phase 1A raw signal layer and the
Phase 1B derived-summary layer. The raw layer includes ``active`` and
``conflicting`` signals (superseded ones are excluded) so callers can
reason about provenance and disagreement; the summary layer is the
conservative published view. This endpoint is read-only and never
reconciles or mutates the graph.

Returns ``404`` when the property does not exist, is hidden from public
view, or belongs to another country, mirroring ``GET /properties/{id}``.

## Path parameters

- `property_id` integer, required

## Query parameters

- `include` 'raw' | 'summary' | 'both': Which projection layer(s) the caller wants in the response.
- `country` 'AU' | 'NZ': ISO country code used to scope the public property.

## Headers

- `API-Version` '1'

## Response `200`

Successful Response

- PropertyCapabilitiesResponse: Capability read-model response for a single property. Exposes generic scoped records from both projection layers. The ``include`` request parameter controls which layers are populated: ``signals`` is null when ``include=summary`` and ``summaries`` is null when ``include=raw``.
  - `property_id` integer, required: Property the capability records belong to.
  - `include` 'raw' | 'summary' | 'both', required: Which projection layer(s) the caller wants in the response.
  - `signals` CapabilitySignal[], nullable: Raw scoped signals (active + conflicting). Null when include=summary.
    - `feature_id` integer, required: ID of the property_features row this signal is about.
    - `feature_name` string, nullable: Display name of the feature (joined from property_features).
    - `feature_category` string, nullable: Category of the feature (e.g. 'Recreation', 'Pet').
    - `scope_type` string, required: What the fact applies to: 'property' today; 'room_type', 'area', 'policy', or 'date_rule' in later phases.
    - `scope_id` integer, nullable: ID of the scoped child entity (room type / area), or null for property-scoped facts.
    - `value` string, required: Tri-state assertion: 'present', 'absent', or 'unknown'.
    - `source` string, required: Provenance class, trust-ordered: 'enforced' > 'structured' > 'classified' > 'operator' > 'inferred' > 'mined'.
    - `confidence` string, required: Ordinal confidence bucket: 'verified' > 'high' > 'medium' > 'low'. Stored separately from source so corroboration can bump a signal without rewriting its provenance.
    - `status` string, required: 'active' or 'conflicting'. A conflicting signal lost a disagreement to a higher-trust source but is retained, never silently dropped. Superseded signals are excluded from this endpoint.
    - `observed_at` string, date-time, nullable: When the fact was last observed from its source.
    - `source_record_type` string, nullable: Identifier of the originating record type (e.g. 'properties.features') for traceability back to the source.
    - `source_record_id` integer, nullable: ID of the originating source record, when applicable.
  - `summaries` CapabilitySummary[], nullable: Derived, safe-to-publish summary claims. Null when include=raw.
    - `feature_id` integer, required: ID of the property_features row this summary is about.
    - `feature_name` string, nullable: Display name of the feature (joined from property_features).
    - `feature_category` string, nullable: Category of the feature (e.g. 'Recreation', 'Pet').
    - `scope_type` string, required: What the claim applies to: 'property' today; child scopes in later phases.
    - `scope_id` integer, nullable: ID of the scoped child entity, or null for property-scoped claims.
    - `value` string, required: Published assertion: 'present', 'absent', or 'unknown'.
    - `winning_source` string, required: Provenance class of the signal that won this claim.
    - `winning_confidence` string, required: Confidence bucket of the winning signal.
    - `supporting_signal_ids` integer[], required: IDs of the raw property_feature_signals that justified this published claim, for traceability back to the evidence.
    - `computed_at` string, date-time, nullable: When this summary was last (re)projected from raw signals.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/totalparks/apis/total-parks-public-api.md) · [All operations](https://skmtc.dev/totalparks/apis/total-parks-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/totalparks/apis/total-parks-public-api/revisions/dcb4c822e2c6?raw)
