---
title: "List webhook endpoints"
method: GET
path: "/api/v1/webhooks"
tags: ["Webhooks"]
---

# List webhook endpoints

`GET /api/v1/webhooks`

## Request

- Base URL: `https://propraven.com`
- URL: `https://propraven.com/api/v1/webhooks`
- Auth: HTTP bearer

Returns every webhook endpoint of the calling account (active and disabled), plus the quota of the caller's API tier.

## Response `200`

Webhook endpoints returned.

- object
  - `webhooks` Webhook[], required
    - `id` string, uuid
    - `url` string, uri: Customer endpoint. Must be https://.
    - `secret_prefix` string: First 14 characters of the secret (`whsec_` + 8 hex). Identifies the endpoint; the full secret is shown only in the create response.
    - `event_types` string[]
    - `filter_kind` 'parcel_ids' | 'state_fips' | 'county_fips'
    - `filter_value` union: Shape varies with filter_kind. parcel_ids: explicit list. state_fips: all parcels in a state. county_fips: all parcels in a county within a state.
      - object
        - `parcel_ids` string[], required: Parcels to subscribe to, 1–1000: canonical ids `state_fips:county_fips:parcel_id` (preferred; the `canonical_id` other endpoints return), legacy `SSCCC:parcel_id`, parcel UUIDs, or a bare parcel_id that names exactly ONE served parcel. parcel_id is county-scoped, so a bare id that names several parcels is refused with 422 `parcel_identity_unresolved` listing the candidate canonical ids. Stored and matched on the full identity; deliveries carry `canonical_id`.
      - object
        - `state_fips` string, required: 2-digit state FIPS — subscribe to all parcels in this state.
      - object
        - `state_fips` string, required
        - `county_fips` string, required: 3-digit county FIPS (within the state) — subscribe to all parcels in this county.
    - `description` string, nullable
    - `is_active` boolean: false after DELETE (a soft disable).
    - `created_at` string, date-time
    - `disabled_at` string, date-time, nullable
    - `disabled_reason` string, nullable: `user` when disabled with DELETE; null while active.
    - `deliveries_attempted` integer
    - `deliveries_succeeded` integer
    - `last_delivery_at` string, date-time, nullable
    - `last_success_at` string, date-time, nullable
    - `identity_status` 'canonical' | 'legacy_bare_parcel_ids': parcel_ids endpoints only. `legacy_bare_parcel_ids`: the endpoint was created before 2026-09-22 with bare parcel numbers, and those that do not name exactly one parcel are not matched; recreate it with canonical ids.
  - `quota` WebhookQuota, required
    - `maxEndpoints` number, required: Max simultaneous active webhook endpoints on this tier.
    - `maxEventsPerDay` number, required: Max event deliveries per UTC day on this tier.
  - `tier` 'free' | 'starter' | 'pro' | 'scale' | 'api_100k', required: The API tier key that sets this account's webhook quota, not the plan name on /pricing: `pro` = Developer, `scale` = Team, `free` = Free; `starter` and `api_100k` are legacy API plans.

## Other responses

- `401`: Missing, malformed or invalid credential.
- `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.

---

[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)
