---
title: "Get a single webhook endpoint"
method: GET
path: "/api/v1/webhooks/{id}"
tags: ["Webhooks"]
---

# Get a single webhook endpoint

`GET /api/v1/webhooks/{id}`

## Request

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

Returns one endpoint as the same snake_case record GET /webhooks lists (the `Webhook` schema). The secret is never returned.

## Path parameters

- `id` string, uuid, required

## Response `200`

Webhook endpoint returned.

- Webhook: One webhook endpoint, as returned by GET /webhooks (each item) and GET /webhooks/{id}.
  - `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.

## 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.

---

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