---
title: "Full paginated text + attribute search"
method: GET
path: "/api/v1/search/full"
tags: ["Search"]
---

# Full paginated text + attribute search

`GET /api/v1/search/full`

## Request

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

Paginated search across the parcel search index by free-text query (`q`) and optional field/state/city filters. Distinct from POST /api/v1/search which is geo-bounded; this endpoint is text-anchored and works without a bounding box. Returns 50/page by default, 200 max.

## Query parameters

- `q` string, required
- `field` 'all' | 'address' | 'owner_name' | 'city'
- `state` string
- `city` string
- `page` integer
- `limit` integer
- `sort` 'address' | 'city' | 'state' | 'owner_name' | 'total_value' | 'year_built'
- `dir` 'asc' | 'desc'
- `after` string

## Response `200`

Paginated search results.

- FullSearchResult
  - `results` object[], required
    - `parcel_id` string, required: PropRaven parcel UUID (not the county APN; see `apn`). Pass it to GET /parcels/{id}.
    - `apn` string, nullable, required
    - `county_fips` string, required
    - `state_fips` string, required
    - `site_address` string, nullable, required
    - `city` string, nullable, required
    - `zip5` string, nullable, required
    - `owner_name` string, nullable, required
    - `total_value` integer, nullable, required
    - `latitude` number, nullable, required
    - `longitude` number, nullable, required
    - `fanout` object: Present only on a row that heads a NY-style fan-out family (one parcel filed under several county FIPS, #552). `record_basis` is `home_county` (the row's point lies in its own county box) or `possible_fanout_copy` (no home row was in the result; `likely_county` names the county the point falls in). `copies_suppressed`, their county FIPS and ids list every copy folded onto this row. Served county_fips and values are never rewritten; a copy's sale price equal to its assessed value is listed under `value_flags` with the raw value.
  - `total` integer, required
  - `totalCapped` boolean, required
  - `page` integer, required
  - `pages` integer, required
  - `hasMore` boolean, required
  - `nextCursor` string, nullable, required
  - `warnings` object[]
    - `code` string, nullable, required
    - `param` string, nullable, required
    - `message` string, nullable, required
  - `total_is_capped` boolean
  - `fanout_collapse` object: Present only when fan-out copies were collapsed (#552): the number of copies suppressed, the families and `complete`; `complete: false` with `copies_suppressed: null` when the check could not run (the totals then include any copies). The witness is the county extent table (county_bbox.json), never the served county_fips.

## Other responses

- `400`: A query or body parameter is invalid. Nothing was read or charged.
- `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.
- `504`: The query did not finish in time. Retry after `Retry-After` seconds or narrow the request.

---

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