---
title: "Read the planning report"
method: GET
path: "/v1/report"
tags: ["Unlocks and reports"]
---

# Read the planning report

`GET /v1/report`

## Request

- Base URL: `https://app.propcode.com.au/api`
- URL: `https://app.propcode.com.au/api/v1/report`
- Auth: HTTP bearer

An unlocked property's planning report (in PropCode, the Pro report): for each land use, whether it can be built under each pathway and by which way, each pathway's rules, and, on a property your team holds Pro on, how sure each answer is. It covers complying development in NSW (nsw-cdc) for now, so another state's jurisdiction answers unsupported_jurisdiction, and new pathways arrive as new entries in the same shape. Give landUse to narrow it to one land use and its rules. A rule's contentUrl gives its clause's text (GET /v1/citations/…). A Pro or a CDC report unlock reads it. Free once the property is unlocked.

## Query parameters

- `title` string, required
- `jurisdiction` string
- `landUse` string
- `view` 'full' | 'summary'
- `rules` boolean

## Response `200`

The report.

- Report: One property's planning report: what can be built, by land use and pathway, and the rules behind each answer.
  - `object` 'report', required
  - `property` Property, required: A property: a title, and where it is.
    - `title` string, required: The title reference.
    - `jurisdiction` string, required: The state: nsw, vic, act or tas.
    - `address` string, required: The property's street address.
    - `lga` string: The local government area.
    - `lotAreaM2` number: The lot's area, in m².
  - `evaluatedAt` string, required: When the report was worked out (ISO 8601).
  - `pathways` Pathway[], required: The pathways the report answers by: nsw-cdc, complying development in NSW, for now.
    - `id` string, required: Its id: the state, then the pathway, such as nsw-cdc. A new pathway adds a new id.
    - `name` string, required: Its name, such as Complying development.
    - `rules` Rule[]: The rules behind its answers, each once, as the report's Pro detail lists them. With landUse, only the rules of that land use's ways.
      - `id` string: The rule's id, where it has one.
      - `ways` string[], required: The ids of the ways in this report that the rule belongs to.
      - `reference` string, required: The clause it comes from, e.g. 3.9(1).
      - `instrument` string: The instrument the clause belongs to, by name.
      - `contentUrl` string: The clause's text (GET /v1/citations/…, or read_citation over MCP), at the instrument's version the rule was reviewed against, where PropCode has the clause in its Library.
      - `description` string, required: What the rule requires, as the report words it.
      - `result` string, required: met or not_met on this lot; unknown when a fact it reads isn't known. Read a value you don't know as unknown.
      - `message` string: Why, where the report says.
      - `certainty` string: How certain PropCode is of this answer, as the report marks it. Given on a property your team holds Pro on, and on the sample properties. Read a value you don't know as not_known.
  - `landUses` ReportLandUse[], required: Each land use the report answers, with its answer under each pathway; with landUse, just that one. A land use or a pathway left out is unanswered, never a no.
    - `id` string, required: The land use's id, as GET /v1/land-uses lists it.
    - `name` string, required: The land use's name.
    - `pathways` PathwayAnswer[], required: Its answer under each pathway the report answers it by.
      - `pathway` string, required: The pathway's id, as pathways lists it, such as nsw-cdc.
      - `verdict` string, required: The answer, in its pathway's words. For complying development (nsw-cdc): eligible: on the facts PropCode holds, the development meets this code's requirements as complying development, and any rule waiting on a fact it can't settle shows as unknown. not_eligible: it fails a requirement of this code. no_conclusion: a fact PropCode can't determine decides it; see unknownCriticalFacts. Other pathways may add their own values: read one you don't know as no_conclusion.
      - `ways` Way[]: The ways to build it new under this pathway. With view=summary, only the eligible ones, and left out when none is.
        - `id` string, required: The way's id: for nsw-cdc, a code's id, as GET /v1/codes lists it.
        - `name` string, required: The way's name.
        - `group` string, required: The group it belongs to: for nsw-cdc, the code's group, such as Low Rise Housing Diversity Code.
        - `verdict` string, required: The answer, in its pathway's words. For complying development (nsw-cdc): eligible: on the facts PropCode holds, the development meets this code's requirements as complying development, and any rule waiting on a fact it can't settle shows as unknown. not_eligible: it fails a requirement of this code. no_conclusion: a fact PropCode can't determine decides it; see unknownCriticalFacts. Other pathways may add their own values: read one you don't know as no_conclusion.
        - `applies` boolean, nullable, required: Whether it applies to this lot; null when a fact PropCode can’t determine decides it.
        - `conclusions` Conclusions: What it allows on this lot, where it says. More limits may come.
          - `dwellings` object: How many dwellings it allows: min and max are the same unless it allows a range, such as 3 to 4.
            - `min` integer, required
            - `max` integer, required
          - `maxGfaM2` number: The largest gross floor area allowed, in m².
          - `maxHeightM` number: The greatest height, in m.
          - `minSubdivisionLotM2` number, nullable: The smallest lot a subdivision may make, in m²; null when the lot can't be subdivided this way.
      - `alterations` Way[]: The ways to alter an existing building for it. They don't count toward its verdict. With view=summary, only the eligible ones, and left out when none is.
        - `id` string, required: The way's id: for nsw-cdc, a code's id, as GET /v1/codes lists it.
        - `name` string, required: The way's name.
        - `group` string, required: The group it belongs to: for nsw-cdc, the code's group, such as Low Rise Housing Diversity Code.
        - `verdict` string, required: The answer, in its pathway's words. For complying development (nsw-cdc): eligible: on the facts PropCode holds, the development meets this code's requirements as complying development, and any rule waiting on a fact it can't settle shows as unknown. not_eligible: it fails a requirement of this code. no_conclusion: a fact PropCode can't determine decides it; see unknownCriticalFacts. Other pathways may add their own values: read one you don't know as no_conclusion.
        - `applies` boolean, nullable, required: Whether it applies to this lot; null when a fact PropCode can’t determine decides it.
        - `conclusions` Conclusions: What it allows on this lot, where it says. More limits may come.
          - `dwellings` object: How many dwellings it allows: min and max are the same unless it allows a range, such as 3 to 4.
            - `min` integer, required
            - `max` integer, required
          - `maxGfaM2` number: The largest gross floor area allowed, in m².
          - `maxHeightM` number: The greatest height, in m.
          - `minSubdivisionLotM2` number, nullable: The smallest lot a subdivision may make, in m²; null when the lot can't be subdivided this way.
  - `keyControls` KeyControl[]: The property's key planning controls and constraints, as the report reads them from PropCode's maps: its zone, height and floor space ratio limits, minimum lot size, lot area, and heritage, bush fire and flood control flags.
    - `name` string, required: The fact's name, e.g. heightOfBuildingsEPI.
    - `title` string, required: What it is, as PropCode words it.
    - `value` union, required: Its value on this property, typed by the control: a number for a numeric control (its unit is in unit), text, or true or false. null when PropCode has none.
      - string
      - number
      - boolean
    - `unit` string: Its unit, e.g. m or m².
  - `unknownCriticalFacts` string[], required: Facts PropCode can’t determine that leave some answers with no_conclusion.
  - `reportUrl` string, required: The report on PropCode, for your team.
  - `shareUrl` string: The report's share link, where your team holds Pro on the property: anyone who has it can read the report, without signing in.

## Other responses

- `400`: The request isn’t valid. Codes: `key_in_url`, `invalid_parameter`.
- `401`: No valid key. Codes: `missing_api_key`, `invalid_api_key`.
- `403`: This key can’t ask that. Codes: `sandbox_title_only`, `key_owner_left`, `not_unlocked`.
- `404`: Not found. Codes: `title_not_found`.
- `422`: Facts or jurisdiction not accepted. Codes: `unsupported_jurisdiction`.
- `429`: Over a limit: retry after Retry-After. Codes: `rate_limited`, `sandbox_daily_limit`.
- `500`: Our error. Codes: `internal_error`.
- `503`: Busy: retry after Retry-After. Codes: `engine_busy`.

---

[API](https://skmtc.dev/propcode/apis/propcode-api.md) - [All operations](https://skmtc.dev/propcode/apis/propcode-api/llms.txt) - [OpenAPI document](https://skmtc.dev/propcode/apis/propcode-api/revisions/f393cce32349?raw)
