---
title: "Building permits by parcel or point"
method: POST
path: "/api/locus-metro-permits"
tags: ["permits", "parcel", "metro", "read-only", "paid", "x402", "category:policy"]
---

# Building permits by parcel or point

`POST /api/locus-metro-permits`

## Request

- Base URL: `https://api.locus.report`
- URL: `https://api.locus.report/api/locus-metro-permits`
- Auth: one of:
  - API key in header `PAYMENT-SIGNATURE`
  - API key in header `Authorization`

Building permits for an address, parcel set, or point, newest or nearest first with distance: number, type, status, dates, and in Chicago, New York City, Austin, and Seattle the contractor companies named plus cost, trade, and scope filters. Returns the same records as locus_metro_permits. Use this when your client can only call paid x402 routes. Use locus_metro_permits instead when you can call Locus free tools (REST tools/call or MCP).

## Request body

- object
  - `place` string: Street address to resolve parcel-first before selecting the legal permitting authority.
  - `city` string: Supported metro key for point mode (registry-verified: cary, minneapolis, columbus, charlotte, chicago, austin, seattle, san francisco, los angeles, new york, mesa, miami, nashville, washington, san antonio, phoenix, denver, fort worth, buffalo, detroit, raleigh, cumming, durham). Prefer place or parcelIds when checking an exact subject.
  - `latitude` number: Decimal latitude for point-radius mode; provide with longitude.
  - `longitude` number: Decimal longitude for point-radius mode; provide with latitude.
  - `parcelId` string: One exact public parcel identifier. Provide state and county.
  - `parcelIds` string[]: Up to 25 exact public parcel identifiers for one project. Provide state and county.
  - `state` string: Two-letter state code required with parcelId or parcelIds.
  - `county` string: County name required with parcelId or parcelIds.
  - `radiusMeters` integer: Optional search radius in meters for point mode; max 3000.
  - `sinceDate` string: Optional ISO date YYYY-MM-DD for point-mode sources; default is 1 year back. For a recurring check, send the previous response's polling.nextSince.
  - `order` 'newest' | 'nearest': Point mode: newest first (default) or nearest first by distance from the point.
  - `maxRecords` integer: Point mode: permits returned, default 25, max 100.
  - `excludePermitIds` string[]: Permit ids already seen on an earlier check. They are dropped before selection; polling.nothingNew is true when nothing else matched.
  - `minReportedCostUsd` number: Only permits whose reported cost as filed is at least this amount (Chicago, New York City, Austin, Seattle).
  - `trade` 'general' | 'electrical' | 'plumbing' | 'mechanical_hvac' | 'roofing' | 'masonry' | 'elevator' | 'solar' | 'fire_protection' | 'demolition' | 'concrete_foundation' | 'signs' | 'other': Only permits whose scope or named contractors involve this trade (Chicago, New York City, Austin, Seattle).
  - `scope` string[]: Only permits with one of these scope tags, e.g. new_construction, demolition, roof (Chicago, New York City, Austin, Seattle).

## Response `200`

Atomic read result. A substantive result is paid; an empty/out-of-coverage result carries charged:false (x402 settlement suppressed).

- object

## Other responses

- `400`: Invalid request body.
- `402`: Payment Required. For x402 v2, repeat the identical request with a valid PAYMENT-SIGNATURE header (legacy X-PAYMENT is accepted for compatibility), or use Authorization: Payment for MPP Tempo when advertised in x-payment-info.offers.

---

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