---
title: "Compose Preliminary"
method: POST
path: "/api/v1/preliminary/compose"
tags: ["preliminary"]
---

# Compose Preliminary

`POST /api/v1/preliminary/compose`

## Request

- Base URL: `https://api.casaintelligence.com.au` (the document declares no server; this is the origin it was published from)
- URL: `https://api.casaintelligence.com.au/api/v1/preliminary/compose`
- Auth: API key in header `X-API-Key`

Build the preliminary report payload without payment (dashboard + tests).

``background=true`` returns immediately with a report id to poll
(GET /report/{id} → status, GET /report/{id}/pdf once ready) — the
synchronous path is edge-proxy-timeout-bound at ~300s while a full
intelligence compose legitimately runs longer.

## Request body

- PreliminaryComposeRequest
  - `property_id` string, required: ci_properties.id (UUID)
  - `dev_type` string: One of: subdivision, townhouse, duplex, mcu, kdr_single, secondary_dwelling.
  - `unit_count` integer
  - `works_intent` string, nullable: Free-text description of the works the applicant wants to do.
  - `combined_property_ids` string[], nullable: Adjoining lot UUIDs to amalgamate with property_id into one combined-site report (admin verification of the paid amalgamation path).
  - `include_intelligence` boolean: When False, skip the AI reasoning/§I passes and compose the deterministic report only — free + fast, for structural/visual QA of the PDF (site plan, layout, amalgamation) without AI spend.
  - `background` boolean: Run compose off the request path: returns {report_id, status: 'generating'} immediately; poll GET /report/{id} until status='ready', then GET /report/{id}/pdf. Use this for full-intelligence composes — synchronous compose can exceed the edge proxy's ~300s request timeout and return a 502 with the work lost.
  - `final_review` boolean: Also run the §I Opus final-review pass on the composed payload (normally paid-path only). Lets §I be verified end-to-end via this admin endpoint without a Stripe purchase: edits/flags log to ci_report_review_edits and the payload carries the final_review stamp. Only honoured with background=true.

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/casaintelligence/apis/casa-intelligence-engine.md) · [All operations](https://skmtc.dev/casaintelligence/apis/casa-intelligence-engine/llms.txt) · [OpenAPI document](https://skmtc.dev/casaintelligence/apis/casa-intelligence-engine/revisions/71d711039de0?raw)
