---
title: "Resolve up to 500 parcel queries in one call"
method: POST
path: "/api/v1/lookup/batch"
tags: ["Parcels"]
---

# Resolve up to 500 parcel queries in one call

`POST /api/v1/lookup/batch`

## Request

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

Each query resolves independently (UUID → APN → address), so a partial batch degrades row by row. Answered from the search index: fields listed in `unavailable_fields` are null on every row of this endpoint. Each matched row is one lookup against your plan.

## Request body

- object
  - `queries` string[], required: Parcel UUIDs, APNs, canonical ids or street addresses (≤ 500).

## Response `200`

One item per query, in input order.

- object
  - `items` object[], required
    - `query` string, nullable, required
    - `match_type` string, nullable, required
    - `parcel` object, nullable, required
      - `id` string, required
      - `apn` string, nullable, required
      - `address` string, nullable, required
      - `city` string, nullable, required
      - `state` string, nullable, required
      - `zip` string, nullable, required
      - `county_fips` string, required
      - `state_fips` string, required
      - `owner_name` string, nullable, required
      - `land_value` number, nullable, required
      - `improvement_value` number, nullable, required
      - `total_assessed_value` integer, nullable, required
      - `last_sale` object, required
        - `date` string, nullable, required
        - `price` number, nullable, required
        - `price_raw` number: The stored price when it is a sentinel ($0 / $1 / $100) served as null (#557).
        - `price_flag` 'sentinel_value'
      - `permits` unknown, required
      - `hazard_score` number, nullable, required
      - `latitude` number, nullable, required
      - `longitude` number, nullable, required
      - `has_geometry` boolean, nullable, required
    - `identity_gate` object: The same identity_gate block parcel_lookup carries (join_key_basis, twins_in_other_counties, record_basis possible_fanout_copy with likely_county, withheld columns, value_flags). `unchecked` when the probe did not run within the batch's time budget.
  - `lookups_charged` number, required
  - `unavailable_fields` string[], required
  - `tier` string, required
  - `notice` string, required

## Other responses

- `400`: A query or body parameter is invalid. Nothing was read or charged.
- `401`: Missing, malformed or invalid credential.
- `402`: Monthly call cap reached (free tier, or a paid tier with the hard cap enabled).
- `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)
