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

# Welcome to PermitCore

> Refreshed-nightly US building-permit data with field-level provenance and a canonical 18-cohort taxonomy.

PermitCore is a building-permit data platform. The API ships **nightly-refreshed**
permits across **25 US metros** today (21 MAPPED + 4 DEPLOY-PENDING),
with cohort classification, parcel-joined geometry where available, and field-level
data-quality flags inline on every row.

This documentation covers the public **`v1` HTTP API** at `https://api.permitcore.io`.

## What's live today

<CardGroup cols={2}>
  <Card title="Cohort distribution" icon="chart-pie" href="/api-reference/jurisdictions/cohort-distribution">
    `GET /v1/jurisdictions/{slug}/cohorts/distribution` — per-jurisdiction
    breakdown across the canonical 18 cohorts. Cached 1 hour upstream.
  </Card>

  <Card title="Permits (list + filter)" icon="database" href="/api-reference/permits">
    `GET /v1/permits?jurisdiction=&cohort=&issued_after=&per_page=&page=` —
    paginated permit rows with field-level DQ flags.
  </Card>

  <Card title="API key management" icon="key" href="/api-reference/keys">
    Programmatic key creation, listing, revocation, and per-key usage telemetry.
  </Card>

  <Card title="Free sandbox" icon="flask" href="https://permitcore.io/sandbox">
    Search permits across metros in your browser. Client-side DuckDB-WASM;
    no signup required.
  </Card>
</CardGroup>

## Conventions in this doc

* **Base URL:** `https://api.permitcore.io`
* **Auth:** `Authorization: Bearer <your-key>` header on every request
* **Format:** JSON in, JSON out (`Accept: application/json`)
* **Versioning:** `/v1/...` path prefix; breaking changes ship as `/v2`
* **Slug conventions:** jurisdictions use lowercase URL-safe slugs (`nyc`,
  `la`, `houston`); cohorts use canonical snake\_case keys
  (`commercial_alteration`, `multifamily_new`)

Five-minute path from zero to first request: [Quickstart →](/quickstart)
