---
title: "Get one permit's events"
method: GET
path: "/api/v1/permits/{permitId}/events"
tags: ["Parcels"]
---

# Get one permit's events

`GET /api/v1/permits/{permitId}/events`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/permits/{permitId}/events`
- Auth: HTTP bearer

One permit's inspections, fees, conditions (stipulations), plan reviews and other child records, as its jurisdiction publishes them, newest first (default 100, at most 500), with the true count and counts by type (#868). The permit_id is the one GET /api/v1/parcels/{id}/permits lists. ACCOUNT REQUIRED (the same access as the parcel permits route). The events' people fields (people_fields_published) count as ONE lookup per response against the account's monthly lookup cap; at the cap they are null and the events are still returned.

## Path parameters

- `permitId` string, required

## Query parameters

- `limit` integer

## Response `200`

The permit and its events.

- object
  - `permit_id` string, required
  - `permit` object, required: The permit's own record (number, type, status, issued date, state, jurisdiction, source). The parcel link is not asserted here.
  - `events` PermitEvent[], required
    - `event_id` string, required: Stable id: <source key>_<publisher row id>, or <source key>_h_<hash of the record's identity fields> when the publisher has no stable row id.
    - `event_type` 'inspection' | 'fee' | 'condition' | 'review' | 'other', required
    - `event_type_raw` string, nullable: The publisher's own type (inspection type, fee type, review type, task).
    - `raw_kind` string, required: The kind of record the source publishes: inspection, fee, stipulation, plan_review, status_history, task, work_item, device, contractor…
    - `event_date` string, date, nullable, required: The record's date (inspection, creation or status date) inside [1900-01-01, release + 365 d]; null otherwise (the publisher's value stays in raw_attributes).
    - `event_status` string, nullable, required: Result or status as published (Pass, Fail, Approved…).
    - `amount` number, nullable, required: Fee amount (fees and work-item fees).
    - `description` string, nullable, required
    - `source_key` string, required: The collected dataset the record came from.
    - `source_url` string, nullable, required
    - `curated_at` string, date, nullable, required: The collection day.
    - `raw_attributes` object, nullable, required: The publisher's record, whole, minus its people-bearing keys (served in people_fields_published).
    - `people_fields_published` object, nullable, required: PEOPLE DATA (account required): the record's contractor / permittee / applicant names, phones and e-mails verbatim; null when withheld (no access, or the lookup cap). Counted with the permits' people fields as one lookup per response.
  - `event_count` integer, required
  - `events_truncated` boolean, required
  - `event_counts` PermitEventCounts, required
    - `inspection` integer
    - `fee` integer
    - `condition` integer
    - `review` integer
    - `other` integer
  - `permit_events_status` 'listed' | 'none_published' | 'not_loaded', required
  - `limit` integer, required
  - `people_fields` object: Present when people fields were withheld.

## Other responses

- `400`: A query or body parameter is invalid. Nothing was read or charged.
- `401`: Missing, malformed or invalid credential.
- `404`: The resource (or the endpoint) does not exist.
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `429`: Rate limit exceeded.
- `500`: Unexpected server error. The body never carries database or driver text.
- `503`: The data behind this endpoint is temporarily unavailable. Honour `Retry-After` when present.

---

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