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

# Building Permits

> Look up recorded permits and contractor work at a covered US street address

Returns building permits from daily copies of public city records. Results normally return inline, with a request ID and receipt. Send an `Idempotency-Key` to replay the saved answer without another charge. If payment confirmation is pending, `202` returns the request ID, receipt ID and key; retry with that same key while the original payment is confirmed.

Coverage starts with **Chicago, Illinois** and **New York City's five boroughs**. NYC covers the legacy DOB permit issuance dataset, **not DOB NOW**. Chicago covers permits from 2006 onward and excludes permits voided or revoked after issuance. This is not nationwide coverage or a complete account of all work on a building.

```typescript theme={null}
await agent.tool('lookup/place-permits', {
  street_address: '7529 N CLARK ST',
  city: 'Chicago',
  state: 'IL',
  issued_from: '2024-01-01',
  limit: 50,
});
```

For NYC, supply `city: 'New York City', state: 'NY', borough: 'Brooklyn'`, or use `city: 'Brooklyn'`. All five borough names are accepted. Supply only the site street address in `street_address`, including its number and directional prefix. Matching ignores case and repeated whitespace but does not geocode, expand street abbreviations, or strip apartment numbers. Use the source's street spelling.

`issued_from` and `issued_to` are inclusive calendar dates (`YYYY-MM-DD`); permits without issue dates are excluded when either filter is present. `permit_type` matches the full source type, ignoring case. `limit` is 1–100 (default 50); `offset` is 0–10000 (default 0). Results sort newest issue date first, then source identifier, with undated permits last. `total` counts all matches before pagination. A refresh can change page contents between calls.

Each permit has `number`, `address`, `district`, `permit_type`, `status`, `filed_date`, `issued_date`, `expiration_date`, `description`, `declared_value` in USD, and `contractors`. Missing fields are `null` (or an empty contractor array). Declared value is reported construction cost, never permit fees. NYC does not publish description or declared value in this dataset. Status is the source's recorded status; an expiration date does not establish current compliance. Contractors are published business names, excluding owner contact fields.

The result includes `source`, `loaded_at` (last successful load or unchanged-source check), and `coverage`. `loaded_at` is a check time, not the date of the permit or a claim that the city has updated every record.

An empty `permits` array means no exact recorded match within these sources and filters. It does not establish that no work occurred. A no-match call is charged.

Unsupported jurisdictions, an unspecified NYC borough, or conflicting city/borough inputs return `422 outside_coverage` before payment. Invalid dates and other malformed inputs return `400 invalid_request`. Missing data, an incomplete or failed refresh, or data not checked in 72 hours returns `503 data_unavailable`. The answer, request and receipt are saved together before payment settles; a read or persistence failure aborts without charging. A keyed replay returns the saved answer even if source data later becomes unavailable.

The proposed price is **\$0.001 per call**, pending owner confirmation before promotion.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.