---
title: "Free Feasibility Snapshot Pdf"
method: POST
path: "/api/v1/feasibility/free/pdf"
tags: ["feasibility"]
---

# Free Feasibility Snapshot Pdf

`POST /api/v1/feasibility/free/pdf`

## 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/feasibility/free/pdf`
- Auth: none declared

Branded one-page PDF snapshot of a free block check.

The snapshot is ALWAYS regenerated server-side via `_run_free_check` —
the same deterministic path /free itself uses. The `payload` field is
still accepted for client compatibility, but it is used ONLY as the
source of the address (plus the geocoder lat/lon that resolved it, so
strata/alias addresses that resolved in the UI resolve here too). None
of its claim content — score, overlays, zone, summary — ever reaches the
renderer: rendering client-authored claims produced a Casa-branded,
Casa-hosted PDF asserting whatever the client invented (audit F11,
free-checker-2026-08-30 — forgery/phishing vector).

Renders via WeasyPrint, uploads to Supabase Storage, and returns a
signed download URL. No AI calls.

## Request body

- FreeSnapshotPdfRequest: Request for the one-page free snapshot PDF. Provide either a previously returned free-check payload (preferred — avoids re-running the lookup) or an address to re-run the check.
  - `address` string, nullable
  - `payload` FreeFeasibilityResponse
    - `address` string, required
    - `display_label` string, nullable
    - `property_id` string, nullable
    - `cadastral_address` string, nullable
    - `suburb` string, nullable
    - `lga` string, required
    - `zone_code` string, nullable
    - `zone_name` string, nullable
    - `overlays` FeasibilityOverlay[]
      - `category` string, required
      - `severity` string, required
      - `name` string, nullable
    - `overlay_count` integer
    - `overlays_checked` string[]
    - `area_m2` number, nullable
    - `development_potential` string, required: yes, no, maybe, or unknown (we could not assess)
    - `casa_score` integer, nullable
    - `summary` string, required
    - `report_url` string, required
    - `zone_facts` ZoneFacts: Deterministic zone facts pulled straight from ci_planning_rules. Every field is optional — only facts actually recorded in the DB are populated. No guessing, no AI.
      - `min_lot_area_m2` number, nullable
      - `min_frontage_m` number, nullable
      - `max_site_cover_pct` number, nullable
      - `max_height_m` number, nullable
      - `max_storeys` integer, nullable
      - `height_source` string, nullable
      - `zone_max_height_m` number, nullable
      - `zone_max_storeys` integer, nullable
      - `height_overlay_label` string, nullable
      - `dual_occ_permitted` boolean, nullable
      - `dual_occ_assessment` string, nullable
      - `multi_unit_permitted` boolean, nullable
      - `multi_unit_assessment` string, nullable
      - `secondary_dwelling` boolean, nullable
      - `allows_subdivision` boolean, nullable
      - `scheme_name` string, nullable
      - `scheme_version` string, nullable
      - `irregular_lot` boolean
      - `lot_shape_note` string, nullable
    - `nearby_activity` NearbyActivity: DA activity within radius_m of the property over the last `years` years.
      - `radius_m` integer
      - `years` integer
      - `total_count` integer
      - `approved_count` integer
      - `median_days_to_decision` integer, nullable
      - `nearest` NearbyDA[]
        - `application_number` string, nullable
        - `description` string, nullable
        - `decision` string, nullable
        - `year` integer, nullable
        - `distance_m` integer, nullable
        - `lat` number, nullable
        - `lon` number, nullable
      - `intel_nuggets` string[]
    - `lat` number, nullable
    - `lon` number, nullable
    - `boundary_geojson` string, nullable
    - `boundary_status` string, nullable
    - `boundary_note` string, nullable
    - `score_percentile` integer, nullable
    - `capability_tiles` CapabilityTiles: The free checker's 1-5 capability tiles + the single disclaimer. `degraded` is the honest no-call message when zoning is unmapped, the zone's rules aren't held, or the record is a strata unit — the tile list is then empty rather than guessed.
      - `tiles` CapabilityTile[]
        - `key` string, required
        - `title` string, required
        - `verdict` string, required
        - `reason` string, required
        - `pathway` string, nullable
        - `pathway_label` string, nullable
        - `metric_facts` object
        - `grounding` object, nullable
      - `disclaimer` string, required
      - `degraded` string, nullable
      - `scheme_name` string, nullable
      - `scheme_version` string, nullable
    - `data_status` string
    - `degraded_components` string[], nullable
    - `degraded_reason` string, nullable
    - `amalgamation` AmalgamationInfo: Present on a combined (multi-lot) check — the site is an amalgamation of the subject plus the selected neighbouring lots, assessed as one site.
      - `lot_count` integer, required
      - `combined_area_m2` number, required
      - `property_ids` string[]
      - `addresses` string[]
      - `same_zone` boolean
      - `note` string, required
    - `overlays_definitive` boolean
    - `overlay_probe` string, nullable

## Response `200`

Successful Response

- FreeSnapshotPdfResponse
  - `pdf_url` string, required

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