---
title: "Verify facts for one parcel"
method: GET
path: "/api/v1/verify"
tags: ["Verify"]
---

# Verify facts for one parcel

`GET /api/v1/verify`

## Request

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

Verify catalogued FACTS: one (parcel, field) assertion per lookup, batch (POST body { lookups: [{ parcel_id, fields }] }, up to 1000 parcels) or single (GET ?parcel_id&fields). Priced per lookup, bulk-discounted ($0.02/$0.012/$0.006), capped $20. Pay from a prepaid credit balance (X-CREDIT-TOKEN) or per call via x402. preview=true returns count+price free; empty/all-invalid is free. Fields whitelisted (is_sfha, flood_zone, nri_risk_score, owner_occupied, is_absentee, owner_name, assessed_value, market_value, building_sqft, year_built, property_type, zoning, lot_size_acres, last_sale_date/price, address/city/state/zip); unknown parcel -> found:false. `owner_name` is people data: it is verified for an account (API key or signed-in session), or for a caller without one once its x402 payment settles or its credit debit succeeds. An UNPAID caller without an account (no X-PAYMENT / X-CREDIT-TOKEN, or preview=true) that asks for owner_name is refused with HTTP 401 `code: "account_required"` before the quote; every other field is unaffected.

## Query parameters

- `parcel_id` string, required
- `fields` string, required
- `preview` string

## Headers

- `X-CREDIT-TOKEN` string
- `X-PAYMENT` string

## Response `200`

Verified facts / preview / empty.

- object
  - `lookup_count` integer, required
  - `parcel_count` integer, required
  - `quote` object, required
    - `per_lookup` object, required
      - `amount` string, required
      - `currency` string, required
    - `total` object, required
      - `amount` string, required
      - `currency` string, required
    - `total_usd` number, required
    - `total_atomic_usdc` string, required
    - `asset` string, required
    - `lookup_count` integer, required
    - `breakdown` object, required
      - `per_lookup_usd` number, required
      - `total_raw` number, required
      - `capped` boolean, required
    - `pay` string[], required
    - `note` string, required
  - `provenance` object, required
    - `source` string, required
    - `source_datasets` string[], required
    - `as_of` string, nullable, required
    - `as_of_basis` string, nullable, required
    - `serving_epoch` string, nullable, required
    - `freshness_status` string, required
    - `catalog_reference` object, required
      - `catalog_version` string, required
      - `catalog_generated_at` string, required
      - `catalog_seal` object, required
        - `algorithm` string, required
        - `value` string, required
        - `covers` string, required
    - `note` string, required
  - `preview` boolean, required
  - `note` string, required

## Other responses

- `400`: Missing parcel_id/fields.
- `401`: `owner_name` requested without an account and without a payment, or on the free preview (`code: "account_required"`, `reason: "people_data_requires_account"`).
- `402`: Payment required — accepts[0].maxAmountRequired carries the batch price (USDC atomic units).
- `405`: The endpoint exists but does not support this method. `Allow` lists the methods it does.
- `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)
