---
title: "Read a Rapid Planning Report"
method: GET
path: "/v1/reports/rpr/{id}"
tags: ["Unlocks and reports"]
---

# Read a Rapid Planning Report

`GET /v1/reports/rpr/{id}`

## Request

- Base URL: `https://app.propcode.com.au/api`
- URL: `https://app.propcode.com.au/api/v1/reports/rpr/{id}`
- Auth: HTTP bearer

A Rapid Planning Report your team started: generating, ready, incomplete or failed, with its outline and sections once it has them. A whole report runs to tens of thousands of characters, so read the outline (section=none), then a section at a time (section=2). An incomplete or failed report is generated again by POST /v1/reports/rpr, once a day at most.

## Path parameters

- `id` string, required

## Query parameters

- `section` union
  - 'none'
  - integer

## Response `200`

The report.

- Rpr: A property's Rapid Planning Report.
  - `object` 'rpr', required
  - `id` string, required: The report's id, for GET /v1/reports/rpr/{id}.
  - `property` object, required
    - `title` string, required
    - `jurisdiction` string, required
    - `address` string, required
  - `reportType` 'multiple_land_uses' | 'single_land_use' | 'subdivision', required
  - `landUse` string: The land use's name, for single_land_use.
  - `status` 'generating' | 'ready' | 'incomplete' | 'failed', required: generating: in progress, usually 2–5 minutes; read it again. ready: generated, with its sections. incomplete: generated with sections missing (missing lists them), and the ones it has. failed: not generated (error says why). For incomplete or failed, POST /v1/reports/rpr again generates it again, once a day at most.
  - `alreadyGenerated` boolean: POST only. true: your team already had this report (one of each type, and one for each land use, per property), so this request generated nothing new. false: this request started generating it.
  - `createdAt` string, required: When it was started (ISO 8601).
  - `reportUrl` string, required: The report on PropCode.
  - `shareUrl` string, required: The report's share link, as PropCode's Share copies it: anyone who has it can read the report, without signing in.
  - `outline` object[]: Every section the report has, in order, once ready or incomplete.
    - `section` integer, required: Its number, for ?section=
    - `title` string, required
    - `characters` integer, required: Its HTML's length, for deciding what to read.
  - `sections` RprSection[]: The report, once ready or incomplete: every section, or the one ?section= asked for, or none with ?section=none.
    - `title` string, required
    - `html` string, required: The section, as HTML as PropCode writes it. Each citation is its document's name and a [n] that citations explains.
    - `citations` RprCitation[], required
      - `n` integer, required: Its number, as [n] in the section.
      - `document` string, required: The planning document, e.g. a local environmental plan.
      - `version` string: The document's version the report read, e.g. 2026-07-01.
      - `location` string: Where in it, by its headings, e.g. Part 4 › 4.3 Height of buildings.
      - `fileName` string: For a document published as PDFs, the name of the PDF the passage is in. Left out for legislation.
      - `page` integer: The page of that PDF the passage starts on, counting from 1, where the document records it.
      - `pdfUrl` string: PropCode's copy of the council's PDF, opened at the page (#page=…). It stops working if PropCode removes that copy.
      - `libraryUrl` string: The passage in PropCode's Library: the document at the version the report read, its file, and the place in it.
      - `contentUrl` string: The cited passage’s text, from the version the report read: GET it with your key (GET /v1/citations/…), or give it to read_citation over MCP.
  - `missing` string[]: The sections that weren't generated, or came out cut short, when incomplete.
  - `error` string: What went wrong, when incomplete or failed.

## Other responses

- `400`: The request isn’t valid. Codes: `key_in_url`.
- `401`: No valid key. Codes: `missing_api_key`, `invalid_api_key`.
- `403`: This key can’t ask that. Codes: `key_owner_left`.
- `404`: Not found. Codes: `not_found`.
- `429`: Over a limit: retry after Retry-After. Codes: `rate_limited`, `sandbox_daily_limit`.
- `500`: Our error. Codes: `internal_error`.

---

[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)
