> ## Documentation Index
> Fetch the complete documentation index at: https://developers.investorlift.com/llms.txt
> Use this file to discover all available pages before exploring further.

# The Permit object

> One building permit on a parcel: the work, its tags, the dates, the declared value and the durations.

One permit as the issuing city or county filed it.
[`GET /v1/properties/{property_id}/permits`](/api-reference/endpoints/properties-permits) returns it. A
[parcel search row](/api-reference/objects/parcel-search-row) summarises the same permits in its `permits` block. The
`recent-permit`, `major-work-permit` and `open-permit`
[quicklists](/guides/concepts/quicklists) read them.

## Status

| `status`    | Means                                           |
| ----------- | ----------------------------------------------- |
| `final`     | Closed out: the work is inspected and finished. |
| `active`    | Issued, work under way.                         |
| `inactive`  | Lapsed, or closed without a final.              |
| `in_review` | Applied for, not issued.                        |

The parcel's `n_open_permits_12m` counts a permit that is `active` or `in_review` and older than a year. Such a
permit is a signal of work started and abandoned, not of work in progress. `status` is null where the
jurisdiction reports none.

## Tags and major work

`type`, `subtype` and `description` are the jurisdiction's own words and differ between cities. `tags[]` is the
normalised reading of them, for example `Solar` or `Pool and Hot Tub`, and it is empty when nothing matched.
`major_work` is true for the five tags that change a house: Addition, ADU, New Construction, Pool and Hot Tub,
Solar.

A tag adds a fact and never removes one. A permit with an empty `tags[]` still describes real work: its words did
not match a normalised label. Filter on tags to find something, not to exclude something.

## The fields a reader misreads

* **`job_value` is what the applicant declared**, and only about half of the Maricopa permits report one. Null is
  "not reported", so a sum is a lower bound. It is never a valuation of the house.
* **The three durations are calendar days**: `approval_duration_days` from filing to issue,
  `construction_duration_days` from issue to final, `total_duration_days` from filing to final. Each is null while
  the permit lacks a date it needs, which is normal on an open permit.
* **`inspection_pass_rate` is a share from 0 to 1**, and is null where the jurisdiction reports no inspections.
* **`id` is stable across snapshots**, so you can follow a permit from one load to the next.

## What is never served

**Applicant names, phones and email addresses.** The permit files carry them on some rows. The pipeline loads them
and drops them before the served tier, for every key and every scope. So this object has no contact field, and no
scope unlocks one.


## Related topics

- [List a parcel's permits](/api-reference/endpoints/properties-permits.md)
- [The Property object](/api-reference/objects/property.md)
- [List the building permits on a parcel](/api-reference/properties/list-the-building-permits-on-a-parcel.md)
- [The Short-term rental parcel object](/api-reference/objects/str-parcel.md)
- [The parcel search row](/api-reference/objects/parcel-search-row.md)
