---
title: "Swath Report: affected properties inside a swath with per-property hail size and exposure score (flagship, billed per record)"
method: GET
path: "/v1/swaths/{id}/properties"
---

# Swath Report: affected properties inside a swath with per-property hail size and exposure score (flagship, billed per record)

`GET /v1/swaths/{id}/properties`

## Request

- Base URL: `https://swathapi.com`
- URL: `https://swathapi.com/v1/swaths/{id}/properties`
- Auth: HTTP bearer

Properties in a swath with exposure.hail_in and exposure.score (0-1), sorted by score then value. Bills 1 credit per property returned +25 per fresh-fetched record (10 min) — preview via the quote endpoint. Free plan is cached-only (coverage.vendor_fetch = "skipped_free_plan").

## Path parameters

- `id` string, required

## Query parameters

- `roof_age_min` number
- `roof_material` string
- `owner_occupied` boolean
- `year_built_before` number
- `year_built_after` number
- `value_min` number
- `value_max` number
- `min_exposure_score` number
- `limit` integer
- `offset` integer
- `format` 'json' | 'csv'

## Response `200`

Report with matched properties

- SwathReport: Swath Report: properties inside the swath, highest exposure first
  - `storm_id` string
  - `swath_id` string
  - `type` 'hail' | 'wind'
  - `verified_at` string, date-time, nullable
  - `mesh_max_in` number, nullable
  - `total` integer: Total matching properties across all pages
  - `count` integer: Properties in this page
  - `offset` integer
  - `coverage` Coverage: Parcel-data coverage metadata for this report run
    - `tiles_fetched` integer: Vendor tiles fetched live during this call
    - `parcels_fetched` integer: Parcels fetched live during this call
    - `vendor` string: Parcel data source label
    - `vendor_fetch` 'live' | 'skipped_free_plan': Whether live vendor fetches ran (free plan is cached-only)
  - `billing` ReportBilling: Actual credits billed for this report call (per-record pricing)
    - `credits` integer: Credits billed: properties_returned × 1 + fresh_fetched × fresh_surcharge_per_record, minimum applied
    - `properties_returned` integer: Properties in this page — 1 credit each
    - `fresh_fetched` integer: Records fetched fresh from the parcel vendor during this call
    - `fresh_surcharge_per_record` integer: Credits per fresh-fetched record (25 at current rates)
    - `minimum` integer: Per-request billing floor (10 credits)
  - `data` ReportProperty[]
    - `address` string
    - `parcel_id` string, nullable
    - `year_built` integer, nullable
    - `sqft` number, nullable
    - `roof_material` string, nullable: Reserved — not populated yet, always null.
    - `roof_age_est` number, nullable: Estimated roof age in years
    - `roof_age_source` string, nullable: Which input produced roof_age_est. Currently always 'year_built' — permit-derived roof ages are on the roadmap, not in the data yet.
    - `last_roof_permit` string, nullable: YYYY-MM-DD of the last roofing permit. Reserved — not populated yet, always null.
    - `owner_occupied` boolean, nullable
    - `assessed_value` number, nullable: Assessed value, USD
    - `lat` number, nullable
    - `lng` number, nullable
    - `exposure` Exposure
      - `hail_in` number, nullable: Max radar hail size at this parcel, inches
      - `score` number, nullable: 0 at the 1.00" detection threshold up to 1.0 at >= 3.00" hail

## Other responses

- `400`: A filter parameter is not a number
- `401`: Missing, invalid, or revoked API key. Fix: pass Authorization: Bearer sk_... (get a key at /v1/signup).
- `402`: Monthly credit limit reached (code credits_exhausted). Fix: upgrade via POST /v1/billing/checkout or wait for the monthly reset.
- `404`: No such swath
- `429`: Per-minute rate limit for the plan exceeded (code rate_limited). Retry after a short wait.

---

[API](https://skmtc.dev/swathapi/apis/swath-api.md) · [All operations](https://skmtc.dev/swathapi/apis/swath-api/llms.txt) · [OpenAPI document](https://skmtc.dev/swathapi/apis/swath-api/revisions/7dbea40372ef?raw)
