{
  "info": {
    "name": "PropRaven API",
    "description": "PropRaven API 1.2.1. Generated from https://propraven.com/openapi.json — do not edit by hand.\n\nSet the collection variable apiKey to your pz_ key.\n\nContact: PropRaven Support <support@propraven.com>",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "version": "1.2.1"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://propraven.com"
    },
    {
      "key": "apiKey",
      "value": "pz_your_api_key"
    }
  ],
  "item": [
    {
      "name": "parcels",
      "item": [
        {
          "name": "Get recorded annual assessment history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/assessment-history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "assessment-history"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "Canonical state_fips:county_fips:parcel_id, legacy county5:parcel_id, or parcel UUID."
                }
              ]
            },
            "description": "Get recorded annual assessment history\n\nReturns source-backed historical assessment observations from published county history. Uses exact national parcel identity. Never substitutes the current parcel snapshot. Unknown assessment years remain null; vintage years and tax years are distinct. Missing years are not interpolated. County coverage can be partial by town and year. Unpublished coverage and failed reads return 503, not an empty history. Requires normal API or first-party session authentication.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get parcel by ID",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Composite parcel identifier in the format county_fips:parcel_id (e.g., 37:119:12104406)."
                }
              ]
            },
            "description": "Get parcel by ID\n\nRetrieve a single parcel by its composite ID (county_fips:parcel_id).",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get parcel owner details and portfolio",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/owner",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "owner"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Composite parcel identifier (county_fips:parcel_id)."
                }
              ]
            },
            "description": "Get parcel owner details and portfolio\n\nRetrieve the owner of a parcel along with their portfolio summary and list of properties.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get parcel permits",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/permits",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "permits"
              ],
              "query": [
                {
                  "key": "shape",
                  "value": "envelope",
                  "disabled": true,
                  "description": "Body shape. Omit for the default bare array of up to 100 permit rows (newest first); `envelope` returns `{ data, permit_count, permit_count_basis, truncated, row_cap }`, where `permit_count` is the parcel's true count when `permit_count_basis` is `exact` and the size of the capped window (a floor) when `capped`, and `truncated` is true when the parcel has more permits than `data` carries."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Composite parcel identifier (county_fips:parcel_id)."
                }
              ]
            },
            "description": "Get parcel permits\n\nRetrieve building and construction permits associated with a parcel. ACCOUNT REQUIRED (API key, MCP OAuth token or signed-in session). Each permit carries the people the jurisdiction filed on it: `owner_name`, `applicant_name`, `permit_contacts` (every published phone and e-mail with its role, \"unknown\" where the publisher states none) and `people_fields_published` (the publisher's own people fields, verbatim). Each served read is recorded in PropRaven's people-data access log. LOOKUP CAP (2026-10-10): a response that carries at least one of these people fields counts as ONE lookup against the account's monthly lookup cap, exactly like an owner card (a paid plan includes it; a response with no people field counts nothing; the record page's own read spends nothing twice). At the cap the people fields are null, `people_fields.code` is `lookup_cap_reached` (on the envelope and on each row) and the permits are still returned; nothing is charged. See `lookups` on GET /api/v1/account/usage. PERMIT EVENTS (#868): a permit whose jurisdiction publishes them carries `events` (its inspections, fees, conditions, plan reviews and other records, newest first, at most 25), `event_count`, `events_truncated` and `event_counts`; the envelope's `permit_events_status` says whether they were read. The events' people fields are gated and counted with the permits'.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get parcel deed history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/deeds",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "deeds"
              ],
              "query": [
                {
                  "key": "shape",
                  "value": "envelope",
                  "disabled": true,
                  "description": "Body shape. Omit for the default bare array of deed rows; `envelope` returns the typed envelope with a `status` header and the frozen `known_deed_count`."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Composite parcel identifier (county_fips:parcel_id)."
                }
              ]
            },
            "description": "Get parcel deed history\n\nRetrieve deed transactions and transfer history for a parcel.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get parcel risk assessment",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/risks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "risks"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Composite parcel identifier (county_fips:parcel_id)."
                }
              ]
            },
            "description": "Get parcel risk assessment\n\nRetrieve flood, wildfire, air quality, and crime risk data for a parcel.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Property-tax delinquency status of a parcel",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/tax-status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "tax-status"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel identifier: the canonical `state_fips:county_fips:parcel_id` form (e.g. `37:119:12104406`), the legacy 5-digit `county_fips5:parcel_id` form, or a PropRaven parcel UUID. URL-encode it."
                }
              ]
            },
            "description": "Property-tax delinquency status of a parcel\n\nWhether the parcel is on a treasurer's or tax collector's published property-tax delinquency, lien-sale or tax-sale list (pilot jurisdictions), with each record's status, amount (and what the amount is), tax years, sale, publisher, dates and the list's scope. People data (the owner on the tax bill, its mailing address, certificate holders). An ACCOUNT is served like the owner card: a response that serves records counts as one lookup against the account's monthly cap (included on paid plans) and is written to the people-data access log; at the cap the records are withheld with `people_fields.code: lookup_cap_reached` (nothing charged). A caller WITHOUT an account may pay per answer ($0.10, `maxAmountRequired` 100000) with an x402 `X-PAYMENT` header or an `X-CREDIT-TOKEN`: the answer (`paid_via: x402 | credits`) is returned only once the payment settles or the debit succeeds; `not_covered` and `unavailable` answers are free (`charged: false`). An UNPAID caller with no account gets 401 `code: account_required` and nothing else. Before the layer's first load `status` is `unavailable`.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Parcel polygons as GeoJSON for a bounding box",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/geojson",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                "geojson"
              ],
              "query": [
                {
                  "key": "bbox",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Bounding box `west,south,east,north`."
                },
                {
                  "key": "zoom",
                  "value": "0",
                  "disabled": false,
                  "description": "Map zoom level. Below 14 returns an empty collection."
                }
              ],
              "variable": []
            },
            "description": "Parcel polygons as GeoJSON for a bounding box\n\nReturns parcel polygons inside a bounding box as a GeoJSON FeatureCollection. Only served at zoom ≥ 14 to limit data volume — coarser bbox returns an empty collection. Each feature's properties include parcel_id, county_fips, owner_name, assessed value, and basic attributes for rendering popups.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Parcel dossier (paid, provenance-first)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "report"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "37183",
                  "disabled": true,
                  "description": "5-digit county FIPS. Strongly recommended when passing a county-local id."
                },
                {
                  "key": "sections",
                  "value": "deeds,permits",
                  "disabled": true,
                  "description": "Comma-separated report sections to deliver in `fields`: identity, valuation, owner, hazard, permits, deeds, market, demographics, `core` (the first four) or `all`. Omit (with no `fields`) for `all` — every populated field the quote was priced on. The compact core is delivered only on an explicit `core`."
                },
                {
                  "key": "fields",
                  "value": "owner_name,zoning_code",
                  "disabled": true,
                  "description": "Comma-separated parcels_serving column names to deliver on top of `sections`."
                },
                {
                  "key": "include_provenance",
                  "value": "false",
                  "disabled": true,
                  "description": "`true` attaches the per-field receipts map (`provenance`, keyed by field name: source, as_of, confidence, coverage, tier). Off by default — the receipts are epoch catalog metadata and roughly triple the payload."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "Parcel ID. Composite `county_fips:parcel_id` or county-local id when `county_fips` query param is provided."
                }
              ]
            },
            "description": "Parcel dossier (paid, provenance-first)\n\nThe Machine Storefront's per-parcel dossier: a single provenance-first JSON payload carrying every POPULATED field for the parcel as `{name, value}` (by default: no `sections`/`fields` params delivers everything the quote was priced on), plus the real deeds / comparable-sales / permits sub-tables (each comparable sale carries the read-time `similarity_score` 0–100 and `similarity_components` the free comps serve; they never change the price). The per-field receipts (source, as_of, confidence, coverage tier) are opt-in: `?include_provenance=true` adds a `provenance` map keyed by field name. `?sections=` (identity, valuation, owner, hazard, permits, deeds, market, demographics, `core`, `all`) and `?fields=` narrow the delivered field list; anything narrowed out is NAMED in `meta.projection.omitted_fields`, and the price never changes with the projection. A ~50 KB soft cap applies to the `fields` portion only. The GeoJSON boundary is held out as a separately-priced add-on the base payload omits.\n\nPRICE (value-tiered, per parcel): price = clamp($5 x V(asset value) x R(data richness) x F(freshness), $2, $20). The exact amount for a given parcel is quoted, before payment, by GET /api/v1/storefront/availability?parcel_id=... and is what the 402 advertises in accepts[0].maxAmountRequired (USDC atomic units, 6 decimals).\n\nACCESS requires ONE of: (a) x402 pay-per-call -- send a base64 signed x402 PaymentPayload in the `X-PAYMENT` header; on a successful build the dossier is returned and the on-chain settlement receipt is in the `X-PAYMENT-RESPONSE` response header. No account is needed: the dossier, PEOPLE DATA included (owner names, owner mailing addresses, entity principals, deed and sale party names and addresses), is delivered to a wallet-only or credit-token buyer once the x402 payment settles or the credit debit succeeds, and the price is computed on exactly that body. An unpaid caller gets the 402 quote and nothing else. Send your API key with the payment to receive them. (b) A genuine PAID PropRaven subscription entitlement -- the dossier is served on the subscription invoice. Being merely authenticated is NOT sufficient: a free-tier key, or a self-service first-party key with no paid plan, receives a 402. (c) Anything else -> HTTP 402 whose `accepts` array carries the exact x402 payment requirements for this parcel.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Comp pack (paid, priced per pack) — with a FREE preview",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/comp-pack",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "comp-pack"
              ],
              "query": [
                {
                  "key": "n",
                  "value": "8",
                  "disabled": true,
                  "description": "How many comps back the pack."
                },
                {
                  "key": "radius",
                  "value": "1",
                  "disabled": true,
                  "description": "Optional post-filter: keep only precomputed comps within this many miles."
                },
                {
                  "key": "preview",
                  "value": "false",
                  "disabled": true,
                  "description": "FREE try-before-buy: subject summary, comp count, exact price and three masked comps. No payment."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel id: canonical state:county:parcel, 5-digit-county:parcel, or a parcel UUID."
                }
              ]
            },
            "description": "Comp pack (paid, priced per pack) — with a FREE preview\n\nThe Machine Storefront's comp pack: a subject valuation INDICATED BY comparable sales, wrapped with the comps that prove it. Answers the underwriting question \"what is this worth, and which sales prove it?\".\n\nThe comps are the SAME precomputed comparable_sales the free GET /api/v1/parcels/{id}/comps route serves, with the same read-time `similarity_score` (0–100) and `similarity_components` on every comp, plus `similarity_basis`, `similarity_method` and `comp_set_quality`; the subject's valuation fields come from parcels_serving. The indicated value is derived transparently (median comp $/sqft x subject sqft when both are known, else the median comp sale price) with an interquartile range, and is reconstructable from the comps in the same payload -- never a black-box AVM.\n\nPRICE: per pack = clamp($2 x V(subject value) x Q(comp support), $1, $20). Q ramps on the comp count only: the similarity score is served but never priced (decoupled 2026-10-10, prices unchanged). A subject with ZERO precomputed comps has no evidence to support a number and is returned free, never charged. The exact price is advertised in the 402's accepts[0].maxAmountRequired (USDC atomic units, 6 decimals).\n\nFREE PREVIEW: add preview=true for the subject summary, the comp count + median similarity, the exact price, and up to three MASKED comps (parcel/APN withheld, sale price rounded, date to the year). The precise indicated value and the unmasked comps are the paid product.\n\nPAID ACCESS (preview omitted) requires ONE of: (a) x402 pay-per-call via a base64 signed x402 PaymentPayload in the `X-PAYMENT` header (receipt in `X-PAYMENT-RESPONSE`); (b) a genuine PAID PropRaven subscription entitlement; (c) anything else -> HTTP 402 whose `accepts` carries the exact requirements.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Risk score (paid, priced per assessment) — with a FREE preview",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/risk-score",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "risk-score"
              ],
              "query": [
                {
                  "key": "preview",
                  "value": "false",
                  "disabled": true,
                  "description": "FREE try-before-buy: subject, resolved hazard layers, and the exact price. No payment."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel id: canonical state:county:parcel, 5-digit-county:parcel, or a parcel UUID."
                }
              ]
            },
            "description": "Risk score (paid, priced per assessment) — with a FREE preview\n\nThe Machine Storefront's risk score: a multi-hazard risk assessment for one parcel, anchored on FEMA's National Risk Index COMPOSITE (nri_risk_score 0-100 + rating) with the flood / seismic / windstorm / wildfire / air-quality / crime breakdown that supports it. Answers \"what could go wrong with this asset?\". The headline is FEMA's own methodology, not an invented weighting.\n\nReuses the SAME panel the free GET /api/v1/parcels/{id}/risks route serves (getParcelRisksData) plus the NRI composite + flood detail from parcels_serving.\n\nPRICE: per assessment = clamp($0.60 x V(asset value) x C(hazard coverage), $0.20, $20). C ramps on how many independent hazard layers resolved. A parcel with ZERO layers is returned free, never charged. The cheapest paid SKU. The exact price is in the 402's accepts[0].maxAmountRequired (USDC atomic units).\n\nFREE PREVIEW: add preview=true for the subject, WHICH hazard layers resolved, and the exact price. The precise NRI score and the hazard breakdown are the paid product.\n\nPAID ACCESS: (a) x402 via a base64 signed PaymentPayload in `X-PAYMENT` (receipt in `X-PAYMENT-RESPONSE`); (b) a genuine PAID subscription entitlement; (c) else HTTP 402 with the exact requirements.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Nearest traffic station + AADT history",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/traffic-history",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "traffic-history"
              ],
              "query": [
                {
                  "key": "lat",
                  "value": "1",
                  "disabled": false,
                  "description": "Latitude."
                },
                {
                  "key": "lng",
                  "value": "1",
                  "disabled": false,
                  "description": "Longitude."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "Parcel ID (used for context only; the actual nearest-station search is by lat/lng)."
                }
              ]
            },
            "description": "Nearest traffic station + AADT history\n\nFinds the AADT (annual average daily traffic) station nearest to the given coordinates and returns its historical time series plus 3/5/7-year CAGRs. Useful for retail / CRE site selection. Search radius ~2 miles; returns empty data if no station is in range.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Fetch up to 100 parcels by (state, county, parcel) tuple",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/batch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                "batch"
              ],
              "query": [],
              "variable": []
            },
            "description": "Fetch up to 100 parcels by (state, county, parcel) tuple\n\nCard-projection rows for up to 100 unique `(state_fips, county_fips, parcel_id)` tuples. `county_fips` is the 3-digit within-state code (a 5-digit value is refused with a 400 naming the fix). Tuples with no match are listed in `missing`.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tuples\": [\n    {\n      \"state_fips\": \"37\",\n      \"county_fips\": \"119\",\n      \"parcel_id\": \"12104406\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Comparable sales for a parcel",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/comps",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "comps"
              ],
              "query": [
                {
                  "key": "n",
                  "value": "8",
                  "disabled": true,
                  "description": "Number of comps (1-25)."
                },
                {
                  "key": "radius",
                  "value": "0",
                  "disabled": true,
                  "description": "Search radius in miles."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel identifier: the canonical `state_fips:county_fips:parcel_id` form (e.g. `37:119:12104406`), the legacy 5-digit `county_fips5:parcel_id` form, or a PropRaven parcel UUID. URL-encode it."
                }
              ]
            },
            "description": "Comparable sales for a parcel\n\nPrecomputed comparable sales near the parcel (`tier` names the comp source).",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Business occupants of a parcel",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/occupants",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "occupants"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel identifier: the canonical `state_fips:county_fips:parcel_id` form (e.g. `37:119:12104406`), the legacy 5-digit `county_fips5:parcel_id` form, or a PropRaven parcel UUID. URL-encode it."
                }
              ]
            },
            "description": "Business occupants of a parcel\n\nBusinesses matched to the parcel (names, brands, categories, match confidence), primary occupant first. At most 100 rows; `truncated` says when more exist. For an account, `licensees` adds the licensed businesses the state licensing boards place at the parcel (firms, or individuals at a publisher-labelled business address; match confidence >= 0.80; never a residential parcel).",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Code violations on a parcel",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/violations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "violations"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel identifier: the canonical `state_fips:county_fips:parcel_id` form (e.g. `37:119:12104406`), the legacy 5-digit `county_fips5:parcel_id` form, or a PropRaven parcel UUID. URL-encode it."
                }
              ]
            },
            "description": "Code violations on a parcel\n\nMunicipal code-enforcement cases matched to the parcel, with the source coverage that says whether an empty list means 'none recorded' or 'not collected here'.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Business parcels in a small bounding box",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/poi",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                "poi"
              ],
              "query": [
                {
                  "key": "bbox",
                  "value": "-80.861,35.209,-80.859,35.211",
                  "disabled": false,
                  "description": "`west,south,east,north` in decimal degrees."
                }
              ],
              "variable": []
            },
            "description": "Business parcels in a small bounding box\n\nUp to 250 parcels with a recorded business type inside `bbox`, highest assessed value first. Boxes larger than 0.03 square degrees return an empty list.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Neighborhood distress index for a parcel's tract and block group",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/distress",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "distress"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel identifier: the canonical `state_fips:county_fips:parcel_id` form (e.g. `37:119:12104406`), the legacy 5-digit `county_fips5:parcel_id` form, or a PropRaven parcel UUID. URL-encode it."
                }
              ]
            },
            "description": "Neighborhood distress index for a parcel's tract and block group\n\nThe neighborhood distress index rows of the parcel's census tract and block group: area-level, describing the neighborhood, not this property. When the parcel has no block group on record, `block_group` is null with `block_group_reason` and the tract is returned alone. Requires an account (API key, MCP OAuth token or signed-in session) and is metered like the other analytics reads; an anonymous caller gets 401 and nothing is read. Before the index's first load the answer is 503 `distress_index_unavailable`.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Read exact retained and current parcel occurrences",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/observations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "observations"
              ],
              "query": [
                {
                  "key": "cohort",
                  "value": "<string>",
                  "disabled": false,
                  "description": ""
                },
                {
                  "key": "selector",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "limit",
                  "value": "1",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "Exact UUID or state:county:rawAPN; APN padding is significant."
                }
              ]
            },
            "description": "Read exact retained and current parcel occurrences\n\nSelect a recorded version and physical row occurrence without treating it as a canonical physical parcel. Mutable current rows are explicitly labeled and rechecked by active version and complete row digest. All physical PG columns retain SQL types and text values; original Parquet/raw-sidecar completeness is not asserted. Existing account, people-data meter, confidentiality and opt-out rules apply; canonical originals remain unchanged. Every response is private, no-store. Imported publisher backups are separately projected for this exact selected occurrence with original field names/native types, procedural reason and undo hash references; incomplete or unimported raw-sidecar coverage is explicit, and no cross-version parcel identity is inferred.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "search",
      "item": [
        {
          "name": "Search parcels",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "search"
              ],
              "query": [],
              "variable": []
            },
            "description": "Search parcels\n\nSearch parcels with optional geographic bounds and attribute filters. `bounds` and `filters` are both optional (`filters` defaults to `{}`); the body is validated and any bad member is a 400 naming it. `sort` applies to UNBOUNDED queries only: with `bounds`, rows come back in spatial-index order and the response says `sort_applied: false`. `total` is the exact number of matching parcels up to 10,000; beyond that it is 10,000 with `total_is_lower_bound: true`, and it is null if the count timed out (`total_status: \"timed_out\"`). Traffic-count columns are withheld until verified: they are returned as null with a `withhold_gate` block, and filters on them (minVpd, maxVpd, minVisibilityScore) are refused with 400 `filter_withheld`.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"bounds\": {\n    \"north\": 35.85,\n    \"south\": 35.75,\n    \"east\": -78.55,\n    \"west\": -78.7\n  },\n  \"filters\": {},\n  \"sort\": \"assessed_value\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Address / place / parcel autocomplete",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/search/autocomplete",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "search",
                "autocomplete"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Search prefix. Minimum 2 chars."
                }
              ],
              "variable": []
            },
            "description": "Address / place / parcel autocomplete\n\nFast prefix-matched autocomplete: returns cities/places, matching parcels, and Mapbox-geocoded addresses for the prefix. Three independent tiers run in parallel with per-tier timeouts so a slow DB query never blocks fast Mapbox results. Use for type-ahead UIs and address entry; for full-detail lookup use parcel lookup.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Export search results as CSV",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/search/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "search",
                "export"
              ],
              "query": [
                {
                  "key": "north",
                  "value": "1",
                  "disabled": true,
                  "description": "Bounding box: north latitude."
                },
                {
                  "key": "south",
                  "value": "1",
                  "disabled": true,
                  "description": "Bounding box: south latitude."
                },
                {
                  "key": "east",
                  "value": "1",
                  "disabled": true,
                  "description": "Bounding box: east longitude."
                },
                {
                  "key": "west",
                  "value": "1",
                  "disabled": true,
                  "description": "Bounding box: west longitude."
                },
                {
                  "key": "zoningCategories",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Comma-delimited zoning categories."
                },
                {
                  "key": "sort",
                  "value": "address",
                  "disabled": true,
                  "description": "Sort column."
                },
                {
                  "key": "order",
                  "value": "desc",
                  "disabled": true,
                  "description": "Sort direction."
                },
                {
                  "key": "limit",
                  "value": "1000",
                  "disabled": true,
                  "description": "Row cap. Hard max 10,000."
                }
              ],
              "variable": []
            },
            "description": "Export search results as CSV\n\nReturns up to 10,000 search-matched parcels as a CSV download. Accepts the same geographic + attribute filters as POST /api/v1/search. Designed for spreadsheet / Excel workflows; for programmatic ingestion, use the JSON search endpoint and paginate.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Full paginated text + attribute search",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/search/full",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "search",
                "full"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Search query. Min 2 chars."
                },
                {
                  "key": "field",
                  "value": "all",
                  "disabled": true,
                  "description": "Field to match against."
                },
                {
                  "key": "state",
                  "value": "<string>",
                  "disabled": true,
                  "description": "2-letter state filter."
                },
                {
                  "key": "city",
                  "value": "<string>",
                  "disabled": true,
                  "description": "City filter."
                },
                {
                  "key": "page",
                  "value": "1",
                  "disabled": true,
                  "description": "1-indexed page number."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 200."
                },
                {
                  "key": "sort",
                  "value": "address",
                  "disabled": true,
                  "description": "Sort column."
                },
                {
                  "key": "dir",
                  "value": "asc",
                  "disabled": true,
                  "description": "Sort direction."
                },
                {
                  "key": "after",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Opaque keyset cursor: pass the previous page's `nextCursor`. Preferred over `page`."
                }
              ],
              "variable": []
            },
            "description": "Full paginated text + attribute search\n\nPaginated 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.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "coverage",
      "item": [
        {
          "name": "Get coverage statistics",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/coverage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "coverage"
              ],
              "query": [
                {
                  "key": "state",
                  "value": "37",
                  "disabled": true,
                  "description": "State FIPS code or abbreviation to filter coverage to a specific state and return county-level breakdown."
                }
              ],
              "variable": []
            },
            "description": "Get coverage statistics\n\nRetrieve parcel coverage statistics at the state or county level. API key optional: anonymous callers are rate-limited per IP; a present but invalid key is a 401; a valid key is rate-limited at its own tier and is not metered.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "County coverage map data",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/coverage/map",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "coverage",
                "map"
              ],
              "query": [],
              "variable": []
            },
            "description": "County coverage map data\n\nPer-county parcel coverage for the national coverage map (compact keys). Free; IP-throttled on the restricted budget; cached for an hour.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "deals",
      "item": [
        {
          "name": "Find absentee owners",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/absentee",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "absentee"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "37183",
                  "disabled": true,
                  "description": "Filter by county FIPS code."
                },
                {
                  "key": "state_fips",
                  "value": "37",
                  "disabled": true,
                  "description": "Filter by state FIPS code."
                },
                {
                  "key": "min_value",
                  "value": "50000",
                  "disabled": true,
                  "description": "Minimum assessed value."
                },
                {
                  "key": "out_of_state",
                  "value": "false",
                  "disabled": true,
                  "description": "Only return owners whose mailing address is in a different state."
                },
                {
                  "key": "tax_delinquent",
                  "value": "false",
                  "disabled": true,
                  "description": "true = only parcels on a treasurer's or tax collector's property-tax delinquency / lien-sale / tax-sale list as of today (status delinquent or in_sale; redeemed and sold never count; expired records never used). Pilot jurisdictions only: a parcel elsewhere never matches. false or absent = no filter."
                },
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Find absentee owners\n\nRetrieve parcels owned by absentee owners, useful for off-market deal sourcing.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Find property flips",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/flips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "flips"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "37183",
                  "disabled": true,
                  "description": "Filter by county FIPS code."
                },
                {
                  "key": "state_fips",
                  "value": "37",
                  "disabled": true,
                  "description": "Filter by state FIPS code."
                },
                {
                  "key": "flip_tier",
                  "value": "QUICK_FLIP",
                  "disabled": true,
                  "description": "Filter by hold time between the two sales: QUICK_FLIP (< 180 days), SHORT_HOLD (180–364 days), MEDIUM_HOLD (365 days to 24 months). Case-insensitive. The former spellings quick / standard / long are accepted as deprecated aliases. Any other value is a 400."
                },
                {
                  "key": "min_profit",
                  "value": "25000",
                  "disabled": true,
                  "description": "Minimum estimated profit."
                },
                {
                  "key": "view",
                  "value": "flippers",
                  "disabled": true,
                  "description": "Set to 'flippers' to return a ranked list of top flippers instead of individual flips."
                },
                {
                  "key": "tax_delinquent",
                  "value": "false",
                  "disabled": true,
                  "description": "true = only parcels on a treasurer's or tax collector's property-tax delinquency / lien-sale / tax-sale list as of today (status delinquent or in_sale; redeemed and sold never count; expired records never used). Pilot jurisdictions only: a parcel elsewhere never matches. false or absent = no filter. Parcel view only (400 with view=flippers)."
                },
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Find property flips\n\nRetrieve recently flipped properties. Use ?view=flippers to get a ranked list of top flippers instead.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Search contractors by permit activity",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/contractors",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "contractors"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "SMITH CONSTRUCTION",
                  "disabled": true,
                  "description": "Contractor name search (case-insensitive substring)."
                },
                {
                  "key": "min_permits",
                  "value": "3",
                  "disabled": true,
                  "description": "Minimum permit count to include."
                },
                {
                  "key": "state",
                  "value": "NC",
                  "disabled": true,
                  "description": "2-letter state filter."
                },
                {
                  "key": "min_value",
                  "value": "0",
                  "disabled": true,
                  "description": "Minimum total declared permit value, USD."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "Search contractors by permit activity\n\nReturns contractor profiles aggregated from 45M+ building permits. Each profile includes permit count, jurisdictions worked, total declared permit value, and activity dates. Use to identify active contractors in a market or find a specific contractor by name.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Find entity-owned parcels (LLC, Corp, Trust, LP)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/entities",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "entities"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "37183",
                  "disabled": true,
                  "description": "5-digit county FIPS filter."
                },
                {
                  "key": "state_fips",
                  "value": "37",
                  "disabled": true,
                  "description": "2-digit state FIPS filter."
                },
                {
                  "key": "entity_type",
                  "value": "LLC",
                  "disabled": true,
                  "description": "Filter by entity classification. Case-insensitive; any other value is a 400."
                },
                {
                  "key": "search",
                  "value": "BLACKSTONE",
                  "disabled": true,
                  "description": "Owner-name substring search."
                },
                {
                  "key": "min_value",
                  "value": "0",
                  "disabled": true,
                  "description": "Minimum assessed value, USD."
                },
                {
                  "key": "zoning",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Zoning substring filter."
                },
                {
                  "key": "top",
                  "value": "false",
                  "disabled": true,
                  "description": "If true, returns aggregated entity rankings with summary stats instead of per-parcel rows."
                },
                {
                  "key": "tax_delinquent",
                  "value": "false",
                  "disabled": true,
                  "description": "true = only parcels on a treasurer's or tax collector's property-tax delinquency / lien-sale / tax-sale list as of today (status delinquent or in_sale; redeemed and sold never count; expired records never used). Pilot jurisdictions only: a parcel elsewhere never matches. false or absent = no filter. Parcel list only (400 with top=true and no geography or search)."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "Find entity-owned parcels (LLC, Corp, Trust, LP)\n\nReturns parcels owned by legal entities identified from owner-name pattern matching across 221M+ parcels. Pass `top=true` to get aggregated entity rankings instead of per-parcel rows. One of `county_fips`, `state_fips`, `search`, or `top` is required.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Find parcels with high land-to-improvement ratio",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/high-land-ratio",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "high-land-ratio"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": "5-digit county FIPS filter."
                },
                {
                  "key": "state_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": "2-digit state FIPS filter."
                },
                {
                  "key": "min_ratio",
                  "value": "3",
                  "disabled": true,
                  "description": "Minimum land/improvement ratio."
                },
                {
                  "key": "min_value",
                  "value": "0",
                  "disabled": true,
                  "description": "Minimum land assessed value, USD."
                },
                {
                  "key": "zoning",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Zoning substring filter."
                },
                {
                  "key": "tax_delinquent",
                  "value": "false",
                  "disabled": true,
                  "description": "true = only parcels on a treasurer's or tax collector's property-tax delinquency / lien-sale / tax-sale list as of today (status delinquent or in_sale; redeemed and sold never count; expired records never used). Pilot jurisdictions only: a parcel elsewhere never matches. false or absent = no filter."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "Find parcels with high land-to-improvement ratio\n\nReturns parcels where land value significantly exceeds improvement value — a signal for redevelopment, teardown, or assemblage opportunities. `county_fips` or `state_fips` is required.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Search lender profiles",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/lenders",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "lenders"
              ],
              "query": [
                {
                  "key": "search",
                  "value": "WELLS FARGO",
                  "disabled": true,
                  "description": "Lender name substring search."
                },
                {
                  "key": "min_mortgages",
                  "value": "2",
                  "disabled": true,
                  "description": "Minimum mortgage count."
                },
                {
                  "key": "state",
                  "value": "NC",
                  "disabled": true,
                  "description": "2-letter state filter."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "Search lender profiles\n\nReturns lender profiles aggregated from deed/mortgage transactions. Includes mortgage count, total volume, geographic spread, and a national rank.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Find long-held parcels (10+ years)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/long-hold",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "long-hold"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": "5-digit county FIPS filter."
                },
                {
                  "key": "state_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": "2-digit state FIPS filter."
                },
                {
                  "key": "min_years",
                  "value": "10",
                  "disabled": true,
                  "description": "Minimum years held."
                },
                {
                  "key": "hold_tier",
                  "value": "10-15yr",
                  "disabled": true,
                  "description": "Filter by hold-period tier. Case-insensitive; any other value is a 400."
                },
                {
                  "key": "min_value",
                  "value": "0",
                  "disabled": true,
                  "description": "Minimum assessed value, USD."
                },
                {
                  "key": "tax_delinquent",
                  "value": "false",
                  "disabled": true,
                  "description": "true = only parcels on a treasurer's or tax collector's property-tax delinquency / lien-sale / tax-sale list as of today (status delinquent or in_sale; redeemed and sold never count; expired records never used). Pilot jurisdictions only: a parcel elsewhere never matches. false or absent = no filter."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "Find long-held parcels (10+ years)\n\nReturns parcels not sold in `min_years` or more. Long-hold owners are often motivated sellers — estate planning, deferred maintenance, life changes. `county_fips` or `state_fips` is required.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "County-quarter transaction summary or affordability index",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/market",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "market"
              ],
              "query": [
                {
                  "key": "view",
                  "value": "affordability",
                  "disabled": true,
                  "description": "Switch to the affordability-index dataset."
                },
                {
                  "key": "county_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": "5-digit county FIPS filter."
                },
                {
                  "key": "state_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": "2-digit state FIPS filter."
                },
                {
                  "key": "year",
                  "value": "2024",
                  "disabled": true,
                  "description": "Year filter."
                },
                {
                  "key": "rating",
                  "value": "AFFORDABLE",
                  "disabled": true,
                  "description": "Affordability-rating filter (only meaningful with view=affordability). Case-insensitive; any other value is a 400."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "County-quarter transaction summary or affordability index\n\nDefault: returns county/quarter transaction summaries. Pass `view=affordability` to retrieve the home-affordability index instead (price-to-income ratios + rating).",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Find portfolio investors (owners of 2+ properties)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/deals/portfolio-owners",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "deals",
                "portfolio-owners"
              ],
              "query": [
                {
                  "key": "min_properties",
                  "value": "2",
                  "disabled": true,
                  "description": "Minimum properties owned."
                },
                {
                  "key": "state",
                  "value": "NC",
                  "disabled": true,
                  "description": "2-letter owner mailing state filter."
                },
                {
                  "key": "min_value",
                  "value": "0",
                  "disabled": true,
                  "description": "Minimum total portfolio assessed value, USD."
                },
                {
                  "key": "search",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Owner name substring search."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "Find portfolio investors (owners of 2+ properties)\n\nReturns portfolio owners ranked by property count and total assessed value. Useful for finding institutional buyers, small landlords, or specific investor families.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "market",
      "item": [
        {
          "name": "Get county market statistics",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/counties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "counties"
              ],
              "query": [
                {
                  "key": "state_fips",
                  "value": "37",
                  "disabled": true,
                  "description": "Filter by state FIPS code."
                },
                {
                  "key": "min_sales",
                  "value": "50",
                  "disabled": true,
                  "description": "Minimum number of sales in the period to include a county."
                },
                {
                  "key": "quarter",
                  "value": "2025Q4",
                  "disabled": true,
                  "description": "Exact quarter, e.g. 2025Q4; any other format is a 400."
                },
                {
                  "key": "sort",
                  "value": "total_volume",
                  "disabled": true,
                  "description": "Sort column. The former spellings median_price and yoy_change are accepted as deprecated aliases; any other value is a 400."
                },
                {
                  "key": "order",
                  "value": "desc",
                  "disabled": true,
                  "description": "Sort direction (case-insensitive); any other value is a 400."
                },
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Get county market statistics\n\nRetrieve real estate market statistics aggregated at the county level, including sale counts, median prices, and year-over-year changes. API key optional (county aggregates, no person-level fields): anonymous callers are rate-limited per IP at the free tier; a present but invalid key is a 401; keyed calls are metered.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get market trends",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/trends",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "trends"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "37183,37063",
                  "disabled": true,
                  "description": "Comma-separated list of county FIPS codes."
                },
                {
                  "key": "state_fips",
                  "value": "37",
                  "disabled": true,
                  "description": "State FIPS code. Used if county_fips is not provided."
                }
              ],
              "variable": []
            },
            "description": "Get market trends\n\nRetrieve quarterly time series of market metrics for one or more counties or a state. Requires an API key (or a signed-in session); metered.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Detailed view for a single county",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/counties/:fips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "counties",
                ":fips"
              ],
              "query": [],
              "variable": [
                {
                  "key": "fips",
                  "value": "<string>",
                  "description": "5-digit county FIPS code."
                }
              ]
            },
            "description": "Detailed view for a single county\n\nReturns the full county profile: quarterly market stats (sale count, median price, YoY change, days on market), affordability index by year, parcel summary (count, avg assessed value), and flip activity. Use for county-detail dashboards.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Flip-activity summary grouped by county",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/flips",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "flips"
              ],
              "query": [
                {
                  "key": "state_fips",
                  "value": "37",
                  "disabled": true,
                  "description": "2-digit state FIPS filter."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Page size, max 500."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset."
                }
              ],
              "variable": []
            },
            "description": "Flip-activity summary grouped by county\n\nAggregated flip activity per county: count, average ROI, average hold days, total profit. Use for surfacing the hottest flip markets. Differs from /api/v1/deals/flips which returns the underlying transactions. Requires an API key (or a signed-in session); metered.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Market snapshot for a geography",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/snapshot",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "snapshot"
              ],
              "query": [
                {
                  "key": "county_fips",
                  "value": "37119",
                  "disabled": true,
                  "description": "5-digit county FIPS."
                },
                {
                  "key": "tract",
                  "value": "<string>",
                  "disabled": true,
                  "description": "11-digit census tract GEOID."
                },
                {
                  "key": "cbsa",
                  "value": "16740",
                  "disabled": true,
                  "description": "CBSA code."
                },
                {
                  "key": "zip",
                  "value": "28202",
                  "disabled": true,
                  "description": "5-digit ZIP."
                }
              ],
              "variable": []
            },
            "description": "Market snapshot for a geography\n\nDemographics, economy, housing, lending, hazard and market context for exactly one geography: a county, census tract, CBSA or ZIP.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get qualified regional Zillow context for a property",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/zillow/context",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "zillow",
                "context"
              ],
              "query": [
                {
                  "key": "parcel_id",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Canonical or legacy county5 parcel identity. The server derives trusted geography after source-use approval."
                },
                {
                  "key": "use",
                  "value": "display",
                  "disabled": true,
                  "description": "Requested use; checked against current source rights. Agent use is not an external send."
                },
                {
                  "key": "as_of",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Optional explicit-offset timestamp for the accepted source vintage known at that time. Future/invalid times rejected; unavailable historical vintages are not reconstructed from current data."
                },
                {
                  "key": "metrics",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Comma-separated unique metric names; defaults to all five. Duplicate names rejected."
                },
                {
                  "key": "window_months",
                  "value": "12",
                  "disabled": true,
                  "description": "Number of calendar months displayed (600 = full available history); missing months remain gaps."
                }
              ],
              "variable": []
            },
            "description": "Get qualified regional Zillow context for a property\n\nRequires API-key or first-party session authentication and a current account in the default-off server cohort. Valid current membership does not require a new paid subscription. Existing API quotas still apply. Responses are private, no-store. Unknown and repeated query parameters are rejected. This contract does not indicate source activation, deployment or an SDK release. Use-specific, unexpired reviewed Zillow rights are checked before parcel resolution or repository/cache access. Denied/unknown rights return explicit unavailable metric values, not substitute data. Each metric exposes actual regional geography/variant and freshness; regional values do not become parcel estimates or residual inputs. Only the trusted served parcel supplies ZIP/county/state. Caller-supplied geography/CBSA is rejected; there is no inferred metro match. canonical_id is omitted when rights prevent parcel lookup.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get one provider region monthly series",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/zillow/timeseries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "zillow",
                "timeseries"
              ],
              "query": [
                {
                  "key": "dataset_key",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Exact enabled dataset registry key (for example zori_metro_monthly); unknown keys rejected."
                },
                {
                  "key": "region_id",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Explicit Zillow provider region identifier."
                },
                {
                  "key": "start_period",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Inclusive first calendar month."
                },
                {
                  "key": "end_period",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Inclusive final calendar month; at most599 months after start."
                },
                {
                  "key": "as_of",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Optional explicit-offset timestamp for the accepted source vintage known at that time. Future/invalid times rejected; unavailable historical vintages are not reconstructed from current data."
                },
                {
                  "key": "use",
                  "value": "display",
                  "disabled": true,
                  "description": "Requested use; checked against current source rights. Agent use is not an external send."
                }
              ],
              "variable": []
            },
            "description": "Get one provider region monthly series\n\nRequires API-key or first-party session authentication and a current account in the default-off server cohort. Valid current membership does not require a new paid subscription. Existing API quotas still apply. Responses are private, no-store. Unknown and repeated query parameters are rejected. This contract does not indicate source activation, deployment or an SDK release. Use-specific, unexpired reviewed Zillow rights are checked before parcel resolution or repository/cache access. Denied/unknown rights return explicit unavailable metric values, not substitute data. Each metric exposes actual regional geography/variant and freshness; regional values do not become parcel estimates or residual inputs. Provider region IDs are not FIPS/CBSA codes. Explicit selection remains regional, not a property mapping. Range is ordered and limited to600 monthly periods.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Compare explicit provider regions at one common period",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/market/zillow/compare",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "market",
                "zillow",
                "compare"
              ],
              "query": [
                {
                  "key": "dataset_key",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Exact enabled dataset registry key (for example zori_metro_monthly); unknown keys rejected."
                },
                {
                  "key": "region_ids",
                  "value": "<string>",
                  "disabled": true,
                  "description": "One to five comma-separated distinct provider IDs; first is reference."
                },
                {
                  "key": "period",
                  "value": "<string>",
                  "disabled": false,
                  "description": "Common monthly reference period."
                },
                {
                  "key": "as_of",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Optional explicit-offset timestamp for the accepted source vintage known at that time. Future/invalid times rejected; unavailable historical vintages are not reconstructed from current data."
                },
                {
                  "key": "use",
                  "value": "display",
                  "disabled": true,
                  "description": "Requested use; checked against current source rights. Agent use is not an external send."
                },
                {
                  "key": "parcel_id",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "metric",
                  "value": "zori",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "window_months",
                  "value": "12",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Compare explicit provider regions at one common period\n\nRequires API-key or first-party session authentication and a current account in the default-off server cohort. Valid current membership does not require a new paid subscription. Existing API quotas still apply. Responses are private, no-store. Unknown and repeated query parameters are rejected. This contract does not indicate source activation, deployment or an SDK release. Use-specific, unexpired reviewed Zillow rights are checked before parcel resolution or repository/cache access. Denied/unknown rights return explicit unavailable metric values, not substitute data. Each metric exposes actual regional geography/variant and freshness; regional values do not become parcel estimates or residual inputs. Up to five distinct region IDs use one dataset/accepted snapshot and common month. First ID is the reference. Value gaps retain a missing reason; incompatible regions are not converted to comparable parcel data. Alternatively provide parcel_id, metric and period (optional window_months) instead of dataset_key and region_ids. Property geography is resolved only by the server. County/metro/national comparisons require compatible metric definitions, units and variants, one requested month and an explicit captured acceptance cutoff. Each dataset retains its own snapshot provenance. Missing mappings, permissions and variants remain unavailable; mixed query forms are rejected.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Neighborhood distress index for a tract, block group or county",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/neighborhood/distress",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "neighborhood",
                "distress"
              ],
              "query": [
                {
                  "key": "geoid",
                  "value": "37119001100",
                  "disabled": true,
                  "description": "11-digit census tract or 12-digit block group GEOID."
                },
                {
                  "key": "county_fips",
                  "value": "37119",
                  "disabled": true,
                  "description": "5-digit county FIPS (screening list)."
                },
                {
                  "key": "level",
                  "value": "tract",
                  "disabled": true,
                  "description": "With county_fips: tract (default) or block_group."
                },
                {
                  "key": "order",
                  "value": "score_desc",
                  "disabled": true,
                  "description": "With county_fips: score_desc (default) or score_asc; unscored areas last."
                },
                {
                  "key": "min_score",
                  "value": "0",
                  "disabled": true,
                  "description": "With county_fips: only areas with score >= this."
                },
                {
                  "key": "limit",
                  "value": "25",
                  "disabled": true,
                  "description": "With county_fips: 1-100."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "With county_fips."
                }
              ],
              "variable": []
            },
            "description": "Neighborhood distress index for a tract, block group or county\n\nArea-level neighborhood distress index (census tract / block group, never an address) for value-add and turnaround screening. Give exactly one of `geoid` (11-digit tract: the tract plus its block groups; 12-digit block group: the block group plus its parent tract) or `county_fips` (a screening list; `level`, `order`, `min_score`, `limit` max 100, `offset`). `score` is 0-100, higher = more distressed, from the national components; `score_local` adds tax delinquency, code violations and foreclosure where a local source covers the area and is null elsewhere. Every component carries its status, source and as-of date; missing / suppressed / not_covered components are left out of the score, never zero. Every answer carries the method (weights, missing-component rule), the sources and the county's coverage. Requires an account (API key, MCP OAuth token or signed-in session) and is metered like the other analytics reads; an anonymous caller gets 401 and nothing is read. Before the index's first load the answer is 503 `distress_index_unavailable`.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "owners",
      "item": [
        {
          "name": "Search property owners",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                "search"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "BLACKROCK",
                  "disabled": false,
                  "description": "Search query for owner name."
                },
                {
                  "key": "min_properties",
                  "value": "5",
                  "disabled": true,
                  "description": "Minimum number of properties owned."
                },
                {
                  "key": "limit",
                  "value": "20",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Search property owners\n\nSearch for property owners by name. Returns owner profiles with property counts and portfolio values.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get owner profile",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/:name",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                ":name"
              ],
              "query": [],
              "variable": [
                {
                  "key": "name",
                  "value": "MARKEY ENTERPRISES INC",
                  "description": "Owner name (URL-encoded)."
                }
              ]
            },
            "description": "Get owner profile\n\nRetrieve a specific owner profile by name, including property count, total assessed value, entity type, and states.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get owner's properties",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/:name/properties",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                ":name",
                "properties"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": [
                {
                  "key": "name",
                  "value": "MARKEY ENTERPRISES INC",
                  "description": "Owner name (URL-encoded)."
                }
              ]
            },
            "description": "Get owner's properties\n\nRetrieve the list of properties owned by a specific owner.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Get owner portfolio summary",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/:name/portfolio",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                ":name",
                "portfolio"
              ],
              "query": [],
              "variable": [
                {
                  "key": "name",
                  "value": "MARKEY ENTERPRISES INC",
                  "description": "Owner name (URL-encoded)."
                }
              ]
            },
            "description": "Get owner portfolio summary\n\nRetrieve an owner's portfolio with aggregated summary statistics and property breakdown.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Owner intelligence report (paid, priced per resolution; account required) — with a free preview",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/:name/report",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                ":name",
                "report"
              ],
              "query": [
                {
                  "key": "ticker",
                  "value": "WFC",
                  "disabled": true,
                  "description": "Optional public stock ticker; when it is on PropRaven's hand-curated list, that entity list is matched instead of expanding `name` (match_basis: ticker_curated — curated, not verified)."
                },
                {
                  "key": "state",
                  "value": "NC",
                  "disabled": true,
                  "description": "Optional 2-letter USPS code (or 2-digit FIPS) to scope the portfolio to one state."
                },
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": "Properties per page in the paid report (the summary always covers the FULL portfolio)."
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": "Pagination offset into the property list."
                },
                {
                  "key": "preview",
                  "value": "false",
                  "disabled": true,
                  "description": "FREE try-before-buy: the summary, the exact price and three masked sample properties. No payment; an account (API key or session) is still required."
                }
              ],
              "variable": [
                {
                  "key": "name",
                  "value": "BLACKSTONE REAL ESTATE",
                  "description": "Owner / entity name to resolve (URL-encoded)."
                }
              ]
            },
            "description": "Owner intelligence report (paid, priced per resolution; account required) — with a free preview\n\nThe Machine Storefront's owner intelligence report: every parcel nationwide whose OWNER-OF-RECORD name matches one owner NAME's realistic spellings (or a public company TICKER's hand-curated entity list), deduped nationally and priced PER RESOLUTION.\n\nACCOUNT REQUIRED (every mode, including the free preview): an API key (`Authorization: Bearer pz_...`) or a signed-in session. Payment alone (an x402 `X-PAYMENT` header or a prepaid `X-CREDIT-TOKEN`) is not an account. An anonymous call is refused with HTTP 401, `code: \"account_required\"`, `reason: \"owner_lookup_requires_account\"`, before any read, payment verification or credit debit.\n\nMATCHING is spelling matching, NOT a verified corporate or beneficial-ownership link: different owners can share a spelling and some of one owner's spellings can be missed. Every property carries `match_basis` (exact_spelling = the record's owner name is the requested name after case/punctuation/whitespace normalization; variant = matched only through an expanded suffix/hyphen/N.A. spelling; ticker_curated = on the hand-curated ticker list) and `match_confidence: \"candidate\"`. The report carries: owner {query_name, ticker, entity_type, resolved_variants, match}, summary {count, total_assessed_value, total_acreage, states, by_state[]}, properties[] (each with match_basis, canonical_id, address, valuation, lot/building, last sale, property_type), and provenance {as_of, source}.\n\nPRICE: per resolution = clamp($1.75 x P(portfolio size) x V(portfolio value), $0.25, $20). P is log-scaled on the distinct parcel count the match uncovers (the dominant axis); V is log-scaled on the summed assessed value; a missing value floors V rather than raising the price. A match that uncovers zero parcels is returned free and never charged. The exact price is advertised in the 402's accepts[0].maxAmountRequired (USDC atomic units, 6 decimals).\n\nFREE PREVIEW: add preview=true for the summary (count, total value, states spanned, entity type), the exact price, and up to three MASKED sample properties (APN truncated to state:county, house number stripped). No payment; an account is still required.\n\nPAID ACCESS (preview omitted), for an authenticated account, requires ONE of: (a) x402 pay-per-call — send a base64 signed x402 PaymentPayload in the `X-PAYMENT` header alongside your credentials; on a successful build the full portfolio is returned and the on-chain settlement receipt is in the `X-PAYMENT-RESPONSE` response header. (b) A prepaid `X-CREDIT-TOKEN` balance. (c) A genuine PAID PropRaven subscription entitlement (owner reports are included). Being merely authenticated is NOT sufficient. (d) Anything else -> HTTP 402 whose `accepts` array carries the exact payment requirements for this resolution.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Recorded deed transactions for an owner",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/:name/transactions",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                ":name",
                "transactions"
              ],
              "query": [],
              "variable": [
                {
                  "key": "name",
                  "value": "MARKEY ENTERPRISES INC",
                  "description": "Owner name. URL-encoded; case-insensitive trimmed match against grantor / grantee."
                }
              ]
            },
            "description": "Recorded deed transactions for an owner\n\nReturns up to 100 most-recent deed events where the named owner is either grantor or grantee. Useful for building an owner's transaction timeline across their portfolio.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Owner card -- the owner of record and their mailing contact (account required)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/card",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                "card"
              ],
              "query": [
                {
                  "key": "parcel_id",
                  "value": "37:119:12104406",
                  "disabled": true,
                  "description": "A canonical id (state:county:parcel) or a parcel UUID. Pass this OR `name`."
                },
                {
                  "key": "name",
                  "value": "<string>",
                  "disabled": true,
                  "description": "An owner of record, exact spelling (e.g. from a parcel lookup). Pass this OR `parcel_id`."
                },
                {
                  "key": "include_low_confidence",
                  "value": "false",
                  "disabled": true,
                  "description": "true -> also return grade-D (contradictory) addresses."
                }
              ],
              "variable": []
            },
            "description": "Owner card -- the owner of record and their mailing contact (account required)\n\nThe owner of record and how to reach them BY MAIL, for one parcel (`parcel_id`) or one owner name (`name`, the exact owner-of-record spelling). Returns the co-owners the same assessor record names (`co_owners`, `co_owner_status`: listed / none_listed / not_checked) and the best mailing address -- read from ONE address column family of the record, with its ZIP, flagged mail_ready / po_box / equals_situs, graded A-D with its source and as-of date (`as_of_basis`: roll_year = the record's tax year; release_vintage = the PropRaven parcel release that served a record with no roll year, never presented as the county's date; recording_date = a deed; null when there is no date) -- plus, for an owner name, the owner's distinct mailing addresses across up to 50 of their parcels (`parcels_citing`). `phones` are OWNER phones only: a building permit filed in the current owner's era published the phone for the owner role (the field name, the publisher, or a role column on the permit says so) and names the current owner; otherwise `phone_status` says none_published, or not_checked when the lookup could not run. `people_on_permits` separately lists applicant and contractor phones from the parcel's permits (role, name, permit, date, and `era`: filed in the current owner's era or before it); they are never the owner's phone, and a phone whose role the source does not state is never served. Every phone is E.164 with its extension split off and the published value kept verbatim (`phone_raw`). Grade-D (contradictory) addresses are hidden unless include_low_confidence=true.\n\nACCOUNT REQUIRED: an API key, an MCP OAuth token or a signed-in session. Anonymous callers -- including x402 / credit-token wallets -- get HTTP 401 `code: \"account_required\"` before any read.\n\nLOOKUP CAP: on an account without a paid plan each card counts as ONE lookup against the monthly lookup cap, spent before any read (a card that is not served is refunded). At the cap: HTTP 402 `code: \"lookup_cap_reached\"` with used / limit / plan and the upgrade link. Each served card is recorded in PropRaven's people-data access log.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Owner pierce -- who is behind an owning entity and what else they control (account required)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/owners/pierce",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "owners",
                "pierce"
              ],
              "query": [
                {
                  "key": "name",
                  "value": "ACME HOLDINGS LLC",
                  "disabled": false,
                  "description": "An owner of record: an entity or a person."
                },
                {
                  "key": "state",
                  "value": "FL",
                  "disabled": true,
                  "description": "2-letter state or 2-digit FIPS; narrows the parcel reads."
                }
              ],
              "variable": []
            },
            "description": "Owner pierce -- who is behind an owning entity and what else they control (account required)\n\nFor an owner-of-record NAME: the owner's Secretary of State filing (exact registry-name key; FL Sunbiz with officers/managers, TX Comptroller entity records), the people listed on it, the other filings that list the SAME person (surname + first name, compatible middle initial, AND the same street address and ZIP), those related entities and their parcels (owner-of-record spellings). A related entity is `same_sponsor: true` only with two independent kinds of evidence (`link_kinds`: sos_principal, sos_co_principal, sos_entity_address that is not the person's own address, assessor_mailing = a shared county-roll owner mailing address); one link is a candidate. Registered-agent services, mass mail-drop addresses and people listed on more than 150 filings never count as evidence (`people[].excluded`, `excluded_evidence`). A PERSON's name returns the entities that list a person of that name, one candidate per address. `sponsor` sums the subject and its same-sponsor entities.\n\nACCOUNT REQUIRED: an API key, an MCP OAuth token or a signed-in session; anonymous and wallet-only callers get HTTP 401 `code: \"account_required\"` before any read. Counts as ONE people lookup (refunded when nothing is served); recorded in PropRaven's people-data access log.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "webhooks",
      "item": [
        {
          "name": "List webhook endpoints",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "webhooks"
              ],
              "query": [],
              "variable": []
            },
            "description": "List webhook endpoints\n\nReturns every webhook endpoint of the calling account (active and disabled), plus the quota of the caller's API tier.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Create a webhook endpoint",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "webhooks"
              ],
              "query": [],
              "variable": []
            },
            "description": "Create a webhook endpoint\n\nCreates a new webhook subscription. The returned `secret` is shown ONCE — store it server-side and use it to verify every incoming delivery via the `X-PropRaven-Signature` header (HMAC-SHA256 over `<unix_ms>.<raw_body>`). Reject deliveries where `|now - t| > 5min`. Every request field is validated before anything is created; `filter_value.parcel_ids` entries are stored as canonical ids (`state_fips:county_fips:parcel_id`). Only active endpoints count toward your quota.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"<string>\",\n  \"event_types\": [\n    \"parcel.sold\"\n  ],\n  \"filter_kind\": \"parcel_ids\",\n  \"filter_value\": \"<string>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Get a single webhook endpoint",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "webhooks",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "Webhook endpoint ID."
                }
              ]
            },
            "description": "Get a single webhook endpoint\n\nReturns one endpoint as the same snake_case record GET /webhooks lists (the `Webhook` schema). The secret is never returned.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Soft-disable a webhook endpoint",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "webhooks",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "Webhook endpoint ID."
                }
              ]
            },
            "description": "Soft-disable a webhook endpoint\n\nSoft disable, not a delete: sets `is_active: false`, `disabled_reason: \"user\"` and `disabled_at`. The endpoint stays in GET /webhooks with its delivery history (readable via the deliveries route). Nothing more is sent to it, including deliveries already queued. There is no hard delete and no re-enable or update operation; create a new endpoint instead. A disabled endpoint does not count toward the quota.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Recent delivery attempts for a webhook",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/:id/deliveries",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "webhooks",
                ":id",
                "deliveries"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "Webhook endpoint ID."
                }
              ]
            },
            "description": "Recent delivery attempts for a webhook\n\nReturns the last 100 delivery attempts for an endpoint — useful for debugging signature mismatches, retry visibility, and dead-letter inspection.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Re-queue a failed webhook delivery",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/:id/deliveries/:deliveryId/retry",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "webhooks",
                ":id",
                "deliveries",
                ":deliveryId",
                "retry"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "9b2f6c1e-0000-4000-8000-000000000000",
                  "description": "Webhook endpoint id."
                },
                {
                  "key": "deliveryId",
                  "value": "4c1d2e3f-0000-4000-8000-000000000000",
                  "description": "Delivery id."
                }
              ]
            },
            "description": "Re-queue a failed webhook delivery\n\nMoves a `pending`, `failed` or `dead_lettered` delivery back to `pending` for immediate redelivery. A delivered one is a 409.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "account",
      "item": [
        {
          "name": "Current-period usage and quota",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/account/usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "account",
                "usage"
              ],
              "query": [],
              "variable": []
            },
            "description": "Current-period usage and quota\n\nReturns the calling key's current-period API usage, included allotment, remaining calls, configured per-minute and per-day rate limits, and the hard-cap status. Per-user (all of a user's API keys roll up to the same monthly counter, since they share a Stripe subscription). `lookups` reports the account's monthly lookup cap (record views and people data), a separate counter from API calls.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "storefront",
      "item": [
        {
          "name": "Machine Storefront — sealed field catalog",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/storefront/catalog",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "storefront",
                "catalog"
              ],
              "query": [
                {
                  "key": "state",
                  "value": "NC",
                  "disabled": true,
                  "description": "USPS code (\"NC\") or 2-digit FIPS (\"37\"). Adds per-state coverage to every field and a state gaps block."
                },
                {
                  "key": "tier",
                  "value": "<string>",
                  "disabled": true,
                  "description": "prime|strong|good|partial|sparse|trace — filter by coverage tier."
                },
                {
                  "key": "section",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Filter to one catalog section (identity, valuation, hazard, …)."
                },
                {
                  "key": "grain",
                  "value": "<string>",
                  "disabled": true,
                  "description": "parcel|county|tract|block_group|zip|unknown."
                },
                {
                  "key": "min_coverage",
                  "value": "0.8",
                  "disabled": true,
                  "description": "0..1 — only fields at/above this national coverage."
                },
                {
                  "key": "red_cells",
                  "value": "1",
                  "disabled": true,
                  "description": "1 → only fields carrying a red-cell honesty flag."
                },
                {
                  "key": "q",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Substring on name, label or description."
                },
                {
                  "key": "include",
                  "value": "<string>",
                  "disabled": true,
                  "description": "plumbing → include the internal provenance columns."
                },
                {
                  "key": "fields",
                  "value": "none",
                  "disabled": true,
                  "description": "none → metadata header only, without the ~615 field entries."
                }
              ],
              "variable": []
            },
            "description": "Machine Storefront — sealed field catalog\n\nThe data catalog IS the storefront: every column of the serving parcel relation with its measured national (and optional per-state) coverage, grain, tier, honesty flags, and pipeline freshness warts, plus the dossier pricing model and base quote (the per-parcel value-tiered price comes from /storefront/availability?parcel_id=). FREE -- authenticated callers are unmetered and uncapped (rate-limited at the scale window); anonymous callers are served and IP-throttled at the free tier. Answered from a committed, sealed artifact -- no database access.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Machine Storefront -- try-before-buy (jurisdiction coverage or per-parcel quote)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/storefront/availability",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "storefront",
                "availability"
              ],
              "query": [
                {
                  "key": "parcel_id",
                  "value": "37:119:12104406",
                  "disabled": true,
                  "description": "PARCEL mode. A canonical state_fips:county_fips:parcel_id, a legacy 5-digit-county:parcel_id, or a parcel UUID. When present, returns the value-tiered dossier quote for this parcel (state/county are ignored)."
                },
                {
                  "key": "state",
                  "value": "NC",
                  "disabled": true,
                  "description": "JURISDICTION mode. USPS code (\"NC\") or 2-digit FIPS (\"37\"). Required unless parcel_id is given."
                },
                {
                  "key": "county",
                  "value": "37183",
                  "disabled": true,
                  "description": "3-digit within-state code (\"183\") or 5-digit state+county (\"37183\"). Optional; narrows JURISDICTION mode to one county."
                },
                {
                  "key": "limit",
                  "value": "25",
                  "disabled": true,
                  "description": "JURISDICTION mode only: cap on the returned county list (default 25, max 400)."
                }
              ],
              "variable": []
            },
            "description": "Machine Storefront -- try-before-buy (jurisdiction coverage or per-parcel quote)\n\nTry-before-buy at two scopes, both FREE and answered from the sealed catalog:\n\nJURISDICTION mode (pass ?state=, optional &county=): how complete each field is in that state/county side-by-side with the national average, plus the worst local gaps and the base dossier quote. No parcel scan.\n\nPARCEL mode (pass ?parcel_id=): the exact value-tiered dossier price for ONE parcel BEFORE paying, with the V/R/F multiplier breakdown, band, and the cheap signals it was derived from. This uses the SAME quote math as the x402 402 on /parcels/{id}/report, so the previewed price equals the amount the payer is charged. Does one light, indexed single-parcel read.\n\nProvide EITHER parcel_id OR state. Same access model as the catalog: authenticated callers unmetered/uncapped, anonymous callers served and IP-throttled.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "leads",
      "item": [
        {
          "name": "Lead feed (paid, priced per lead) — with a FREE preview",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/leads/find",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "leads",
                "find"
              ],
              "query": [
                {
                  "key": "signal",
                  "value": "absentee",
                  "disabled": false,
                  "description": "Which qualified cohort to pull from. Priced by strength: absentee (1.0x, widest) < long_hold (1.1x) < entity_owned (1.15x) < portfolio_owner (1.25x) < high_land_ratio (1.4x) < flip (1.6x) < distressed (1.9x)."
                },
                {
                  "key": "state",
                  "value": "NC",
                  "disabled": false,
                  "description": "REQUIRED 2-letter USPS state code. Every pull is pruned to one state partition."
                },
                {
                  "key": "county",
                  "value": "183",
                  "disabled": true,
                  "description": "3-digit within-state code (\"183\") or 5-digit state+county (\"37183\")."
                },
                {
                  "key": "zip",
                  "value": "27601",
                  "disabled": true,
                  "description": "5-digit ZIP. Supported only on the long_hold and entity_owned cohorts (the other source relations carry no ZIP column) -- a zip on any other signal returns 400."
                },
                {
                  "key": "value_min",
                  "value": "0",
                  "disabled": true,
                  "description": "Minimum assessed value (sell price for the flip cohort), USD."
                },
                {
                  "key": "value_max",
                  "value": "0",
                  "disabled": true,
                  "description": "Maximum assessed value (sell price for the flip cohort), USD."
                },
                {
                  "key": "limit",
                  "value": "25",
                  "disabled": true,
                  "description": "How many leads to buy. Default 25, max 200. You pay for min(matching rows, limit)."
                },
                {
                  "key": "preview",
                  "value": "false",
                  "disabled": true,
                  "description": "true -> the FREE preview (count + quote + up to three masked sample leads, no payment). Omit or false -> the paid call."
                },
                {
                  "key": "mail_ready",
                  "value": "false",
                  "disabled": true,
                  "description": "true -> only parcels whose record carries a complete mailing address (street, city, state, 5-digit ZIP) in ONE column family. Parcel-grain signals only (400 on portfolio_owner). Each delivered lead's `owner_contact.mail_ready` is the final word. Narrow with `county` in large states: the filter checks every candidate."
                },
                {
                  "key": "tax_delinquent",
                  "value": "false",
                  "disabled": true,
                  "description": "true = only parcels on a treasurer's or tax collector's property-tax delinquency / lien-sale / tax-sale list as of today (status delinquent or in_sale; redeemed and sold never count; expired records never used). Pilot jurisdictions only: a parcel elsewhere never matches. false or absent = no filter. Requires an account, preview included (401 `account_required` otherwise). Parcel-grain signals only (400 on portfolio_owner)."
                }
              ],
              "variable": []
            },
            "description": "Lead feed (paid, priced per lead) — with a FREE preview\n\nThe Machine Storefront's lead feed: the qualified target list for one SIGNAL in one STATE, delivered as lead records and priced PER LEAD.\n\nEach lead carries its canonical_id (state:county:APN), owner, assessed value, that signal's own strength fields (years held, land/improvement ratio, flip profit, portfolio size, ...), a deterministic lead_score (1-100) and provenance {as_of, source}.\n\nPRICE: per_lead = clamp($0.25 x S(signal strength) x V(asset-value tier), $0.05, $1.00); total = min(count x per_lead, $20). You pay for the leads DELIVERED -- min(matching rows, limit) -- and an empty result is never charged for. The exact total is advertised in the 402's accepts[0].maxAmountRequired (USDC atomic units, 6 decimals).\n\nFREE PREVIEW: add preview=true for the exact count, the exact quote and up to three MASKED sample leads (APN truncated to state:county, house number stripped, owner name and every other people field withheld). No payment, no API key required; anonymous callers are IP-throttled at the free tier. The anonymous security alternative (`{}`) applies to the preview ONLY.\n\nACCOUNT OR PAYMENT FOR DELIVERY: a lead is an owner's name and mailing address by area -- people data. It is delivered to a PropRaven ACCOUNT (API key `Authorization: Bearer pz_...`, MCP OAuth token or signed-in session) and to a PAID pull without one: the leads are returned only once the x402 payment SETTLES or the `X-CREDIT-TOKEN` debit succeeds. An unpaid (non-preview) pull without an account is refused with HTTP 401 `code: \"account_required\"`, `reason: \"people_data_requires_account\"`.\n\nPAID ACCESS (preview omitted) requires ONE of: (a) x402 pay-per-call -- send a base64 signed x402 PaymentPayload in the `X-PAYMENT` header (account credentials optional); on a successful build the leads are returned and the on-chain settlement receipt is in the `X-PAYMENT-RESPONSE` response header. (b) A prepaid `X-CREDIT-TOKEN` balance. (c) A genuine PAID PropRaven subscription entitlement (lead feeds are included). Being merely authenticated is NOT sufficient. (d) Anything else -> HTTP 402 whose `accepts` array carries the exact payment requirements for this pull.\n\nOWNER CONTACT: each delivered lead carries `owner_contact` -- the owner's best mailing address, read from ONE address column family of the record with its ZIP, flagged mail_ready. `mail_ready=true` narrows the pull to parcels whose record carries a complete one-family mailing address (parcel-grain signals only). Each delivery is recorded in PropRaven's people-data access log before it is returned; if the log is unavailable the delivery is refused (503) and nothing is charged.\n\nBOUNDED READS: every read carries a statement timeout (10 s with `mail_ready`, 25 s otherwise). A pull too broad to finish returns 503 `code: \"lead_read_timeout\"` telling you to narrow it (add `county`); nothing is charged.\n\nNOTE on `distressed`: an assessment-derived cohort (a structure on the books assessed at a nominal value, on land that carries real value). It is NOT a pre-foreclosure, tax-lien or lis-pendens feed.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "credits",
      "item": [
        {
          "name": "Fund a prepaid credit balance over x402",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": true
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/storefront/credits/topup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "storefront",
                "credits",
                "topup"
              ],
              "query": [
                {
                  "key": "amount",
                  "value": "1",
                  "disabled": false,
                  "description": "Whole USD to fund ($1–$1000)."
                }
              ],
              "variable": []
            },
            "description": "Fund a prepaid credit balance over x402\n\nPay `amount` USDC once via x402 to fund a prepaid credit balance; receive a credit token (pzc_...) to spend on any paid endpoint via the X-CREDIT-TOKEN header — the recurring/volume rail, no account, no CDP/Stripe. GET with no payment returns a 402 for `amount`; present an existing X-CREDIT-TOKEN to top it up in place. Idempotent on the settlement tx.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Read a prepaid credit balance + ledger",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": false
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/storefront/credits/balance",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "storefront",
                "credits",
                "balance"
              ],
              "query": [],
              "variable": []
            },
            "description": "Read a prepaid credit balance + ledger\n\nReturn the balance and recent ledger for the credit token in the X-CREDIT-TOKEN header. No payment; the token is the credential (never a query param).",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "watch",
      "item": [
        {
          "name": "List your watches",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": false
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/watch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "watch"
              ],
              "query": [],
              "variable": []
            },
            "description": "List your watches\n\nList active watches for the X-CREDIT-TOKEN. Free.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Create a watch (free)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": false
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/watch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "watch"
              ],
              "query": [],
              "variable": []
            },
            "description": "Create a watch (free)\n\nCreate a watch tied to your credit token: a filter over parcels/geography + change event types. It reports changes going FORWARD; poll it to receive (and pay per delta for) new changes. Managing watches is free. Body: { filter, event_types?, name? } where filter is { parcel_ids:[...] } | { canonical_ids:[...] } | { state_fips } | { county_fips, state_fips } and event_types is a subset of parcel.sold / parcel.owner_changed / parcel.permit_filed (default all). Parcel ids (1–500) are canonical `state_fips:county_fips:parcel_id` ids, parcel UUIDs, or bare parcel_ids that name exactly ONE served parcel; a bare id that names several parcels is refused (422, candidates listed). The watch is stored and matched on canonical ids; `parcel_resolution` reports how each input resolved.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filter\": {\n    \"parcel_ids\": [\n      \"<string>\"\n    ],\n    \"canonical_ids\": [\n      \"<string>\"\n    ],\n    \"state_fips\": \"<string>\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Poll a watch for new changes (priced per delta)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": false
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/watch/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "watch",
                ":id"
              ],
              "query": [
                {
                  "key": "preview",
                  "value": "false",
                  "disabled": true,
                  "description": "FREE count + price + masked sample; no cursor move."
                },
                {
                  "key": "limit",
                  "value": "1",
                  "disabled": true,
                  "description": "Max deltas per source (default 50, max 200)."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "The watch id (wat_...)."
                }
              ]
            },
            "description": "Poll a watch for new changes (priced per delta)\n\nPoll new parcel_deeds / parcel_permits changes matching the watch since its per-source cursor. preview=true returns the pending count + exact price + a masked sample (FREE, no cursor move). A paid poll debits the credit balance PER DELTA (clamp($0.05 x event-strength, $0.02, $0.20), capped $20/poll), advances the cursor, and returns the full deltas. A poll with no new changes is free. Insufficient balance -> 402. Parcel watches match on the full parcel identity; each delta carries `canonical_id` + `match_basis`. A watch created before 2026-09-22 whose stored bare ids are ambiguous reports them in `identity_issues` (not matched) on every poll. Deed parties (grantor / grantee names and addresses, prior / new owner) are people data, delivered to accounts only: a poll paid with a credit token and no account (no API key, no signed-in session) receives the deltas with those fields set to null and a top-level `people_fields` marker (see PeopleFieldsWithheld). The events themselves (what changed, where, when, for how much) are unchanged.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Delete a watch",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": false
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/watch/:id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "watch",
                ":id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "The watch id."
                }
              ]
            },
            "description": "Delete a watch\n\nDeactivate a watch. Free.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "verify",
      "item": [
        {
          "name": "Verify facts for one parcel",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": true
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/verify",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "verify"
              ],
              "query": [
                {
                  "key": "parcel_id",
                  "value": "37:119:12104406",
                  "disabled": false,
                  "description": "Canonical state:county:parcel."
                },
                {
                  "key": "fields",
                  "value": "is_sfha,owner_occupied",
                  "disabled": false,
                  "description": "Comma-separated field aliases."
                },
                {
                  "key": "preview",
                  "value": "<string>",
                  "disabled": true,
                  "description": "FREE count + price."
                }
              ],
              "variable": []
            },
            "description": "Verify facts for one parcel\n\nVerify 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.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Verify facts (batch, paid per lookup) - FREE preview",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": true
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/verify",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "verify"
              ],
              "query": [
                {
                  "key": "preview",
                  "value": "<string>",
                  "disabled": true,
                  "description": "FREE count + price."
                }
              ],
              "variable": []
            },
            "description": "Verify facts (batch, paid per lookup) - FREE preview\n\nVerify 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.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"lookups\": [\n    {\n      \"parcel_id\": \"37:119:12104406\",\n      \"fields\": [\n        \"is_sfha\",\n        \"year_built\"\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "cohorts",
      "item": [
        {
          "name": "Mail-merge export of one of your lists (account required; included for subscribers, per row otherwise)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "X-CREDIT-TOKEN",
                "value": "<X-CREDIT-TOKEN>",
                "disabled": true
              },
              {
                "key": "X-PAYMENT",
                "value": "<X-PAYMENT>",
                "disabled": true
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cohorts/:id/export",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cohorts",
                ":id",
                "export"
              ],
              "query": [
                {
                  "key": "preview",
                  "value": "false",
                  "disabled": true,
                  "description": "true -> the free row count and exact quote, no data."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "The list (cohort) id."
                }
              ]
            },
            "description": "Mail-merge export of one of your lists (account required; included for subscribers, per row otherwise)\n\nA mail-merge CSV of one of the caller's own lists: one row per MAILING ADDRESS (owner, mailing line1 / city / state / ZIP, the property address(es), their canonical ids, stage, source, as_of, as_of_basis, grade). Every address is read from ONE address column family of a parcel's record, with its ZIP; only mail-ready addresses become rows, and `X-Export-Parcels-Not-Mail-Ready` counts the rest.\n\nACCOUNT REQUIRED: an API key or a signed-in session; anonymous callers -- including x402 / credit-token wallets -- get HTTP 401 `code: \"account_required\"` before any read. The list must be the caller's own (404 otherwise).\n\nPRICE: INCLUDED for a paid PropRaven subscription. Any other account pays $0.10 per mailing row, the quote capped at $20, from a prepaid credit balance (`X-CREDIT-TOKEN`) or per call via x402 (`X-PAYMENT`, sent with your credentials); with neither, HTTP 402 carrying the exact quote. `preview=true` returns the row count and the quote, free, with no data.\n\nEach export is recorded in PropRaven's people-data access log BEFORE the CSV is returned (and before an x402 payment settles). If the log cannot be written the export is refused (503) and any charge refunded or released.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "List your saved parcel lists (cohorts)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cohorts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cohorts"
              ],
              "query": [],
              "variable": []
            },
            "description": "List your saved parcel lists (cohorts)\n\nCohorts are saved parcel lists built in the PropRaven app; export one with GET /cohorts/{id}/export.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "lookup",
      "item": [
        {
          "name": "Exact parcel lookup (UUID or APN)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/lookup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "lookup"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "<string>",
                  "disabled": false,
                  "description": "PropRaven parcel UUID or APN (min 2 chars)."
                }
              ],
              "variable": []
            },
            "description": "Exact parcel lookup (UUID or APN)\n\nResolve one parcel from an exact key: a PropRaven parcel UUID or an APN. Answered from the search index (the `parcel` fields are a subset of GET /parcels/{id}). Anonymous callers are IP-throttled on the restricted budget (100/day); fuzzy address input needs a key and is answered by POST /lookup/batch.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Resolve up to 500 parcel queries in one call",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/lookup/batch",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "lookup",
                "batch"
              ],
              "query": [],
              "variable": []
            },
            "description": "Resolve up to 500 parcel queries in one call\n\nEach 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.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"queries\": [\n    \"<string>\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "cmbs",
      "item": [
        {
          "name": "CMBS loan exposure for a parcel or an owner",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/cmbs/exposure",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "cmbs",
                "exposure"
              ],
              "query": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "disabled": true,
                  "description": "Parcel id (single-parcel mode)."
                },
                {
                  "key": "owner",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Borrower or sponsor name (portfolio mode)."
                }
              ],
              "variable": []
            },
            "description": "CMBS loan exposure for a parcel or an owner\n\nCommercial mortgage-backed security loans tied to one parcel (`id`) or to a borrower/sponsor portfolio (`owner`). Pass exactly one.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "freshness",
      "item": [
        {
          "name": "How fresh the served parcel snapshot is",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/freshness",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "freshness"
              ],
              "query": [],
              "variable": []
            },
            "description": "How fresh the served parcel snapshot is\n\nTwo different clocks for the served national parcel snapshot. `content_as_of` is the CONTENT date of the served data: how current the records in it are. How it is measured is named in `content_date_basis` and explained in `content_date_note` (read both; the basis can change). `swapped_at` is the time the serving slot was last swapped, i.e. when the current snapshot went live; a swap re-serves data, it does not refresh it, so `swapped_at` can be weeks newer than `content_as_of`. `snapshot_built_at` is when that snapshot was built, `updated_at` mirrors `swapped_at` and `last_enriched_at` mirrors `content_as_of` (both kept for older clients). All values are national: a state still served from an earlier epoch is not reported separately here. Free; anonymous callers are IP-throttled.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Per-dataset availability and freshness",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/freshness/datasets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "freshness",
                "datasets"
              ],
              "query": [],
              "variable": []
            },
            "description": "Per-dataset availability and freshness",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "crime",
      "item": [
        {
          "name": "Crime score near a point",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/crime/lookup",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "crime",
                "lookup"
              ],
              "query": [
                {
                  "key": "lat",
                  "value": "35.2271",
                  "disabled": false,
                  "description": "Latitude."
                },
                {
                  "key": "lng",
                  "value": "-80.8431",
                  "disabled": false,
                  "description": "Longitude."
                }
              ],
              "variable": []
            },
            "description": "Crime score near a point\n\nThe crime score of the nearest scored parcel within about 500 m of the point, or `crime: null`. Free; IP-throttled.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "traffic",
      "item": [
        {
          "name": "Traffic count stations in a bounding box",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/traffic/stations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "traffic",
                "stations"
              ],
              "query": [
                {
                  "key": "bbox",
                  "value": "-80.87,35.20,-80.85,35.22",
                  "disabled": false,
                  "description": "`west,south,east,north` in decimal degrees."
                }
              ],
              "variable": []
            },
            "description": "Traffic count stations in a bounding box\n\nUp to 150 traffic count stations (AADT) inside `bbox`, busiest first.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "licensees",
      "item": [
        {
          "name": "Search licensed firms in a place",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/licensees/firms",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "licensees",
                "firms"
              ],
              "query": [
                {
                  "key": "state",
                  "value": "FL",
                  "disabled": false,
                  "description": "A state the licensee layer serves (Texas licensee files are a QA witness and never served)."
                },
                {
                  "key": "profession",
                  "value": "real_estate",
                  "disabled": true,
                  "description": "License profession."
                },
                {
                  "key": "city",
                  "value": "Tampa",
                  "disabled": true,
                  "description": "City as the licensee address publishes it (case-insensitive). A city or a zip is required."
                },
                {
                  "key": "zip",
                  "value": "<string>",
                  "disabled": true,
                  "description": "5-digit ZIP. A city or a zip is required."
                },
                {
                  "key": "status",
                  "value": "active",
                  "disabled": true,
                  "description": "License status as published, mapped."
                },
                {
                  "key": "min_locations",
                  "value": "1",
                  "disabled": true,
                  "description": "Minimum distinct locations per firm in the place."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Firms returned (largest first)."
                }
              ],
              "variable": []
            },
            "description": "Search licensed firms in a place\n\nFirms licensed by the issuing state boards (FL DBPR and DFS, CA DRE and the Board of Accountancy, NY DOS, CT DCP, VA DPOR, AZ ADRE, OH Division of Real Estate, OR Real Estate Agency, NJ Division of Consumer Affairs, WV Real Estate Commission) in one city or zip, grouped by name and by the issuer's parent-license link, with their distinct street locations. `min_locations=3` finds firms with at least three licensed locations there. Requires an account; a person-shaped firm is people data and each response serving one is logged. 503 `licensee_layer_unavailable` until the layer is loaded.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Search licensed individuals (people data)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/licensees/individuals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "licensees",
                "individuals"
              ],
              "query": [
                {
                  "key": "state",
                  "value": "NV",
                  "disabled": false,
                  "description": "A state whose individual licensees are served."
                },
                {
                  "key": "name",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Name words (at least 3 letters); every word must appear in the published name, in any order. One of name, license_number, city or zip is required."
                },
                {
                  "key": "license_number",
                  "value": "<string>",
                  "disabled": true,
                  "description": "License number as published (exact, case-insensitive)."
                },
                {
                  "key": "city",
                  "value": "Las Vegas",
                  "disabled": true,
                  "description": "City of the published address (case-insensitive)."
                },
                {
                  "key": "zip",
                  "value": "<string>",
                  "disabled": true,
                  "description": "5-digit ZIP of the published address."
                },
                {
                  "key": "profession",
                  "value": "real_estate",
                  "disabled": true,
                  "description": "License profession."
                },
                {
                  "key": "status",
                  "value": "active",
                  "disabled": true,
                  "description": "License status as published, mapped."
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": "Individuals returned (name order)."
                }
              ],
              "variable": []
            },
            "description": "Search licensed individuals (people data)\n\nLicensed individuals as their boards publish them: Nevada Real Estate Division (brokers, property managers, community managers), Oregon Real Estate Agency (brokers, principal brokers, property managers; active and inactive) and West Virginia Real Estate Commission (brokers). Search by name (every word, any order), license_number, city or zip. People data: requires an account (an anonymous call gets 401), each page that serves rows counts as one lookup and is logged, and a person on the privacy suppression list is withheld (`privacy_suppressed`). The address is the board's published address with the board's own label; it is not a claim that the person works there. 503 `licensee_layer_unavailable` until the list is loaded.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "intelligence",
      "item": [
        {
          "name": "Get evidence-backed property signals",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/signals",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "signals"
              ],
              "query": [
                {
                  "key": "as_of",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Effective-time cutoff; explicit UTC timestamp. Defaults to the service capture clock. Future values rejected."
                },
                {
                  "key": "knowledge_cutoff",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Only observations known by this time contribute. Defaults to the same capture clock; original knowledge is never backdated from a publication or vintage."
                },
                {
                  "key": "use",
                  "value": "display",
                  "disabled": true,
                  "description": "Requested use; checked against current source rights. Agent use is not an external send."
                }
              ],
              "variable": [
                {
                  "key": "id",
                  "value": "<string>",
                  "description": "URL-encoded canonical state_fips:county_fips:parcel_id or legacy county5:parcel_id. Bare APNs and UUIDs are not accepted here."
                }
              ]
            },
            "description": "Get evidence-backed property signals\n\nRequires API-key or first-party session authentication and a current account in the default-off server cohort. Valid current membership does not require a new paid subscription. Existing API quotas still apply. Responses are private, no-store. Unknown and repeated query parameters are rejected. This contract does not indicate source activation, deployment or an SDK release. Retained objects are scoped to the current account and their creator; no caller-supplied account/user grant is accepted. Current source rights are checked for every read/use, independently of archived grants. Assessment composition, where qualified, is not market value. Other groups remain explicitly unavailable without approved adapters. Exact values are numerator/denominator strings; historical runs exclude later-learned evidence.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Read an owned retained run and evidence",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/intelligence/runs/:runId",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "intelligence",
                "runs",
                ":runId"
              ],
              "query": [
                {
                  "key": "use",
                  "value": "display",
                  "disabled": true,
                  "description": "Requested use; checked against current source rights. Agent use is not an external send."
                }
              ],
              "variable": [
                {
                  "key": "runId",
                  "value": "<string>",
                  "description": "Retained 64-character lowercase SHA-256 run ID, owned by this account and creator."
                }
              ]
            },
            "description": "Read an owned retained run and evidence\n\nRequires API-key or first-party session authentication and a current account in the default-off server cohort. Valid current membership does not require a new paid subscription. Existing API quotas still apply. Responses are private, no-store. Unknown and repeated query parameters are rejected. This contract does not indicate source activation, deployment or an SDK release. Retained objects are scoped to the current account and their creator; no caller-supplied account/user grant is accepted. Current source rights are checked for every read/use, independently of archived grants. Withdrawn rights or changed source semantics may withhold a saved result; its immutable archived payload is not rewritten.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Save an explicit named residual scenario",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/intelligence/scenarios",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "intelligence",
                "scenarios"
              ],
              "query": [],
              "variable": []
            },
            "description": "Save an explicit named residual scenario\n\nRequires API-key or first-party session authentication and a current account in the default-off server cohort. Valid current membership does not require a new paid subscription. Existing API quotas still apply. Responses are private, no-store. No query parameters are used by this operation; its inputs are the strict JSON body. This contract does not indicate source activation, deployment or an SDK release. Retained objects are scoped to the current account and their creator; no caller-supplied account/user grant is accepted. Current source rights are checked for every read/use, independently of archived grants. Creates an immutable base/downside/upside revision linked to an owned readable run. A parent revision must belong to the same run and creator. Formula uses fixed-dollar profit and purchase-independent carry; no live values/default costs are invented. Negative residuals remain explicit. The JSON object is strict, bounded to 16,384 bytes, and costs must contain each of the five buckets once.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"run_id\": \"<string>\",\n  \"label\": \"base\",\n  \"assumptions\": {\n    \"currency\": \"<string>\",\n    \"gross_completed_sale\": \"<string>\",\n    \"selling_costs\": \"<string>\",\n    \"costs\": [\n      {\n        \"bucket\": \"hard\",\n        \"amount\": \"<string>\",\n        \"currency\": \"<string>\"\n      }\n    ],\n    \"required_profit_dollars\": \"<string>\",\n    \"fixed_acquisition_costs\": \"<string>\",\n    \"acquisition_cost_rate\": \"<string>\",\n    \"profit_mode\": \"<string>\",\n    \"carry_mode\": \"<string>\",\n    \"input_source\": \"<string>\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Prepare an owned structured investigation handoff",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/intelligence/runs/:runId/handoff",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "intelligence",
                "runs",
                ":runId",
                "handoff"
              ],
              "query": [
                {
                  "key": "use",
                  "value": "display",
                  "disabled": true,
                  "description": "Requested use; checked against current source rights. Agent use is not an external send."
                },
                {
                  "key": "scenario_id",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Optional saved scenario revision belonging to the same run and creator."
                }
              ],
              "variable": [
                {
                  "key": "runId",
                  "value": "<string>",
                  "description": "Retained 64-character lowercase SHA-256 run ID, owned by this account and creator."
                }
              ]
            },
            "description": "Prepare an owned structured investigation handoff\n\nRequires API-key or first-party session authentication and a current account in the default-off server cohort. Valid current membership does not require a new paid subscription. Existing API quotas still apply. Responses are private, no-store. Unknown and repeated query parameters are rejected. This contract does not indicate source activation, deployment or an SDK release. Retained objects are scoped to the current account and their creator; no caller-supplied account/user grant is accepted. Current source rights are checked for every read/use, independently of archived grants. Returns the same retained calculations, evidence and optional saved scenario, with observations separated from user assumptions. The scenario must belong to the same run/creator. Delivery is structured_only_not_sent; no agent/model is started.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "zoning",
      "item": [
        {
          "name": "Zoning of a parcel, from the issuing jurisdiction",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/parcels/:id/zoning",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "parcels",
                ":id",
                "zoning"
              ],
              "query": [],
              "variable": [
                {
                  "key": "id",
                  "value": "37:119:12104406",
                  "description": "Parcel identifier: the canonical `state_fips:county_fips:parcel_id` form (e.g. `37:119:12104406`), the legacy 5-digit `county_fips5:parcel_id` form, or a PropRaven parcel UUID. URL-encode it."
                }
              ]
            },
            "description": "Zoning of a parcel, from the issuing jurisdiction\n\nThe parcel's zoning code exactly as the issuing jurisdiction published it, the issuing body (a city or town, not the county), overlays as a set, split zoning, and, where the ordinance has been parsed, the underwriting attributes (minimum lot area, height, FAR/density, setbacks, by-right multifamily, ADU), each with its ordinance section, verbatim quote and link in `attributes.citations`. Null is never zero or false. `{ zoning: null, reason: \"not_collected\" }` means the parcel's jurisdiction has not been collected yet; it says nothing about whether the parcel is zoned. A research starting point, not a legal determination. Account required.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Screen parcels by zoning",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/zoning/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "zoning",
                "search"
              ],
              "query": [
                {
                  "key": "state_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "county_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "jurisdiction_id",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "raw_code",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Exact published code(s), comma-separated or repeated."
                },
                {
                  "key": "base_code",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "family",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "has_overlay",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "without_overlay",
                  "value": "false",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "multifamily_by_right",
                  "value": "false",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "adu_allowed",
                  "value": "false",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "min_lot_area_sqft_max",
                  "value": "1",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "max_height_ft_min",
                  "value": "1",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "limit",
                  "value": "50",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "offset",
                  "value": "0",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Screen parcels by zoning\n\nParcels by exact raw code (case-sensitive), base code, overlay, derived family, or parsed ordinance attribute. Attribute filters EXCLUDE parcels whose code is unparsed, so an empty result means unknown, not none; `dictionary_warning` and `coverage` say how much was parsed. Unknown parameters are a 400. Account required.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Zoning coverage per jurisdiction",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/zoning/coverage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "zoning",
                "coverage"
              ],
              "query": [
                {
                  "key": "state_fips",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                },
                {
                  "key": "jurisdiction_id",
                  "value": "<string>",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": []
            },
            "description": "Zoning coverage per jurisdiction\n\nOne row per registered zoning body with its honest `servingStatus` (served / partial / no_zoning / failed / registered) and reason, parcels matched against a measured denominator, distinct codes, overlays, and how many codes have parsed ordinance attributes (zeros included). Account required; the same table is on https://propraven.com/coverage.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "distribution",
      "item": [
        {
          "name": "R2 delivery metadata",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/r2-credentials",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "r2-credentials"
              ],
              "query": [],
              "variable": []
            },
            "description": "R2 delivery metadata\n\nReturns the R2 bucket, the prefixes a credential may name, the credential TTL limits in seconds, the catalog object and whether the caller's plan carries R2 delivery. AUTHENTICATED (signed-in session only): an anonymous call gets HTTP 401 from the session gate and an API key is not accepted. Credentials themselves are minted with POST on the same path from a signed-in session (see https://propraven.com/docs/r2); that operation is not part of the API-key contract.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Databricks Delta Sharing metadata",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/data/databricks/grant",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "data",
                "databricks",
                "grant"
              ],
              "query": [],
              "variable": []
            },
            "description": "Databricks Delta Sharing metadata\n\nReturns the Delta Share name, the recipient types, whether delivery is configured and whether the channel is paused, with the channel status and its date. AUTHENTICATED (signed-in session only): an anonymous call gets HTTP 401 from the session gate and an API key is not accepted. Provisioning is POST on the same path from a signed-in session (see https://propraven.com/docs/databricks); while the channel is paused it returns 503 with a waitlist message. That operation is not part of the API-key contract.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "permits",
      "item": [
        {
          "name": "Get one permit's events",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/permits/:permitId/events",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "permits",
                ":permitId",
                "events"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "100",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": [
                {
                  "key": "permitId",
                  "value": "9fnm-j6if_M022026048B39",
                  "description": "The permit's permit_id, as GET /api/v1/parcels/{id}/permits lists it."
                }
              ]
            },
            "description": "Get one permit's events\n\nOne permit's inspections, fees, conditions (stipulations), plan reviews and other child records, as its jurisdiction publishes them, newest first (default 100, at most 500), with the true count and counts by type (#868). The permit_id is the one GET /api/v1/parcels/{id}/permits lists. ACCOUNT REQUIRED (the same access as the parcel permits route). The events' people fields (people_fields_published) count as ONE lookup per response against the account's monthly lookup cap; at the cap they are null and the events are still returned.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        },
        {
          "name": "Search permits, matched to a parcel or not",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/permits/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "permits",
                "search"
              ],
              "query": [
                {
                  "key": "permit_id",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Exact permit_id."
                },
                {
                  "key": "permit_number",
                  "value": "2024-007387 PP",
                  "disabled": true,
                  "description": "Permit number; punctuation, spaces and case are ignored."
                },
                {
                  "key": "address",
                  "value": "320 E 72nd St",
                  "disabled": true,
                  "description": "House number and street. Needs state or zip."
                },
                {
                  "key": "source",
                  "value": "3syk-w9eu",
                  "disabled": true,
                  "description": "The permit's jurisdiction_id (source dataset key)."
                },
                {
                  "key": "state",
                  "value": "NY",
                  "disabled": true,
                  "description": "Two-letter state or 2-digit FIPS."
                },
                {
                  "key": "zip",
                  "value": "<string>",
                  "disabled": true,
                  "description": "ZIP code. With an address and a state, rows that publish no zip are kept (address_basis.zip = not_published)."
                },
                {
                  "key": "city",
                  "value": "<string>",
                  "disabled": true,
                  "description": "City filter; rows that publish no city are kept."
                },
                {
                  "key": "issued_from",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Issued on or after."
                },
                {
                  "key": "issued_to",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Issued on or before."
                },
                {
                  "key": "type",
                  "value": "<string>",
                  "disabled": true,
                  "description": "permit_type, permit_type_raw or permit_category (case-insensitive)."
                },
                {
                  "key": "status",
                  "value": "<string>",
                  "disabled": true,
                  "description": "permit_status (case-insensitive)."
                },
                {
                  "key": "matched",
                  "value": "any",
                  "disabled": true,
                  "description": "Only matched (true) or unmatched (false) permits."
                },
                {
                  "key": "limit",
                  "value": "25",
                  "disabled": true,
                  "description": "Page size."
                },
                {
                  "key": "cursor",
                  "value": "<string>",
                  "disabled": true,
                  "description": "next_cursor from the previous page."
                }
              ],
              "variable": []
            },
            "description": "Search permits, matched to a parcel or not\n\nFind permits whether or not they are matched to a parcel (#868: about half of the permits served are not linked to a parcel, so GET /api/v1/parcels/{id}/permits cannot list them). Give one of permit_id (exact), permit_number (punctuation, spaces and case ignored), address (house number + street, with state or zip: suffixes, directionals and ordinals are normalised and a unit is ignored; a stored unit, city or zip after the street still matches) or source (the permit's jurisdiction_id, newest issued first). The other parameters filter; a state-only scan is refused (400 search_scope_required). Results are ordered issued_date DESC NULLS LAST, permit_id DESC and paged with an opaque keyset cursor (next_cursor). A request has a 15 s deadline: past it, 504 search_timeout with Retry-After. ACCOUNT REQUIRED; owner_name / applicant_name count as ONE people lookup per response, and at the cap they are null and the permits are still returned.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "sources",
      "item": [
        {
          "name": "Read full-fidelity observations from a published source",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/sources/:sourceId/observations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "sources",
                ":sourceId",
                "observations"
              ],
              "query": [
                {
                  "key": "cursor",
                  "value": "<string>",
                  "disabled": true,
                  "description": "Exact source-specific next_cursor from the prior page; native public provenance cursors reject stale publication/run bindings."
                },
                {
                  "key": "limit",
                  "value": "20",
                  "disabled": true,
                  "description": ""
                }
              ],
              "variable": [
                {
                  "key": "sourceId",
                  "value": "<string>",
                  "description": "Published source identifier, for example billings-mt-permits."
                }
              ]
            },
            "description": "Read full-fidelity observations from a published source\n\nAccount and existing people verification/meter required. Original source fields and native geometry remain beside versioned normalization, provenance, flags and separate area/parcel links. Parcel-unmatched observations remain searchable by source. Private acquisition paths are not served. Existing confidentiality and live opt-out rules affect served copies; canonical originals stay private. Source issue/inspection dates are reported separately from pull time; unpublished/unqualified source returns503. Precision-sensitive integers/decimals use tagged exact text rather than lossy JSON numbers.",
            "auth": {
              "type": "bearer",
              "bearer": [
                {
                  "key": "token",
                  "value": "{{apiKey}}",
                  "type": "string"
                }
              ]
            }
          }
        }
      ]
    }
  ]
}
