{
"id": "<string>",
"jurisdiction": "<string>",
"permit_number": "<string>",
"type": "<string>",
"subtype": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"major_work": true,
"file_date": "<string>",
"issue_date": "<string>",
"final_date": "<string>",
"job_value": 0,
"fees": 123,
"inspection_pass_rate": 123,
"approval_duration_days": 0,
"construction_duration_days": 0,
"total_duration_days": 0
}The Permit object
One building permit on a parcel: the work, its tags, the dates, the declared value and the durations.
GET /v1/properties/{property_id}/permits returns it. A
parcel search row summarises the same permits in its permits block. The
recent-permit, major-work-permit and open-permit
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. |
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_valueis 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_daysfrom filing to issue,construction_duration_daysfrom issue to final,total_duration_daysfrom filing to final. Each is null while the permit lacks a date it needs, which is normal on an open permit. inspection_pass_rateis a share from 0 to 1, and is null where the jurisdiction reports no inspections.idis 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.One building permit on the parcel. The API never serves applicant names, phones and addresses.
Permit id, stable across snapshots (32 hex).
The issuing city or county, upper case; null when the delivery does not record it.
The jurisdiction's own number; null when the delivery does not record it.
The jurisdiction's own type label; null when the delivery does not record it.
The jurisdiction's own subtype; null when the delivery does not record it.
Null when the jurisdiction reports none. Permit status as the jurisdiction reports it. The values: final (closed out), active (issued, work under way), inactive (lapsed or closed, no final), in_review (applied for, not issued).
final, active, inactive, in_review The permit description as filed; null when the delivery does not record it.
The normalised work tags that apply, for example ["Solar"], ["Pool and Hot Tub"], ["New Construction"]. Empty when none.
True when the tags include Addition, ADU, New Construction, Pool and Hot Tub or Solar.
Application date.
Issue date.
Final inspection or close-out date.
Declared job value; null when the jurisdiction reports none. Most jurisdictions report none.
-9007199254740991 <= x <= 9007199254740991Fees paid; null when the delivery does not record it.
Share of inspections passed, 0 to 1; null when the jurisdiction reports no inspections.
Days from filing to issue; null when either date is null.
-9007199254740991 <= x <= 9007199254740991Days from issue to final; null when either date is null.
-9007199254740991 <= x <= 9007199254740991Days from filing to final; null when either date is null.
-9007199254740991 <= x <= 9007199254740991Was this page helpful?