> ## Documentation Index
> Fetch the complete documentation index at: https://developers.investorlift.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Read which states the dataset serves

> Read which states the dataset serves.

This route serves the dataset under `/v3/coverage`. See [The dataset](/api-reference/dataset) for the tier rules.


## OpenAPI

````yaml GET /v3/coverage
openapi: 3.1.0
info:
  title: God Mode API
  version: 1.44.0
  description: >-
    You have a house to sell, usually a wholesale contract. You want **the
    investors who buy houses like this one, from county deed records**. This API
    reads those records for each served state and serves the buyers: the
    organizations behind the deeds, their people, the agents, the lenders and
    the listings. On every response, `meta.build.states[]` lists the served
    states and the publish behind each.


    **Deals** are the flagged purchases of the deed cut: a sale at arm's length
    that the rules read as an investment. **Buyers** are the organizations
    behind them: one organization for the entities of a registry, with the
    people it files. **Lenders** are the organizations that hold the loans on
    those deals, keyed through the same registry.


    The documentation site at https://developers.investorlift.com carries the
    guides, the walkthroughs, the error catalogue and the connection steps for
    MCP clients. https://developers.investorlift.com/llms.txt indexes the site
    for a model. This document is the machine-readable reference behind the API
    tab of the site.


    **Start here.** The buyers of one Scottsdale ZIP code since 2024, the most
    purchases first:


    ```

    GET https://api.investorlift.com/v3/buyers?zip=85251&from=2024-01-01&limit=3

    Authorization: Bearer zpka_...

    ```


    **Conventions.** Responses are `{ data, meta }`. Lists add `page` (an opaque
    cursor). A list parameter takes commas or repeated keys. Dates are
    YYYY-MM-DD. The ids are the ids of the files. An organization is the state,
    a colon and its registry number (`AZ:L17142520`). A person is `person:` and
    12 hex characters, and an agent is the state, `:agt:` and 12 hex characters.
    A deal is 32 hex characters.


    Money is whole dollars. It is null, never 0, when the deed carries no price.
    Coordinates are WGS84. A place is a ZIP list (`zip`), a point and radius
    (`lat`, `lng`, `radius_miles`) or a viewport (`bbox=west,south,east,north`).
    A parcel (`property_id`) and an address with its ZIP are places too.


    Every operation carries `x-credits`, its price in credits on the public
    tier. `charge` is null at 0 credits. Otherwise `kind` names the deal,
    investor or property (a parcel) that costs 1 credit when new to your
    account. `base` is the credits a call costs before them. `contract: true`
    marks a route sold by contract.


    Every operation also carries `x-raises`, the problem codes it can answer,
    sorted. Each problem response of the operation lists and shows the codes of
    its status alone. The list includes the codes the gateway answers on its
    own.


    This host does not serve the name of a person, a licence, a phone, an email,
    a website or a mailing address. It serves the organizations, the deals, the
    buyers, the properties, the places, the listings and the lenders.


    Errors are RFC 9457 problem+json with a `code` to switch on. The catalogue
    is https://developers.investorlift.com/problems.json and the Errors page of
    the site. The header `X-Dataset-Version` changes only when a state is
    published again. Use it in cache keys, or poll `GET /v3/build`.


    **MCP.** The API serves the same data to Model Context Protocol clients at
    `POST https://api.investorlift.com/mcp` with the same key: forty-five
    read-only tools, five resources, six prompts. The MCP tab of the
    documentation site has the client setup. The file `mcp-manifest.json` beside
    this document lists the tools with their inputs.


    Problem codes: 400 validation_error, 400 unknown_parameter, 400
    invalid_cursor, 400 geometry_required, 400 geometry_conflict, 400
    sort_requires_point, 400 invalid_id, 400 market_required, 401 unauthorized,
    403 quota_exceeded, 403 subscription_required, 403 payment_overdue, 403
    plan_limit, 404 not_found, 404 job_not_found, 409 job_not_done, 406
    not_acceptable, 410 gone, 413 batch_too_large, 422 outside_coverage, 422
    ambiguous_apn, 422 ambiguous_address, 422 csv_cap_exceeded, 422
    listings_unavailable, 422 agents_unavailable, 422 lenders_unavailable, 422
    wholesale_unavailable, 422 str_unavailable, 422 cash_sale_unavailable, 422
    auction_unavailable, 422 parcels_unavailable, 422 addresses_unavailable, 422
    dated_refused, 422 history_unavailable, 400 quicklist_unavailable, 400
    dataset_unavailable, 429 rate_limited, 500 internal_error, 503
    database_unavailable, 503 pool_saturated, 503 ledger_unavailable, 503
    jobs_unavailable, 504 statement_timeout.
servers:
  - url: https://api.investorlift.com
security:
  - bearerAuth: []
tags:
  - name: dataset
    x-group: Dataset
    description: >-
      The served set, under `/v3`: who buys houses, from the state business
      registry, the deeds, the listings and the loans. The routes serve a name
      search, the organizations, the people, the agents, the deals and the
      buyers. They serve the properties, the places, the listings and the
      lenders too. Two probes serve the coverage and the build of each served
      state.
externalDocs:
  description: >-
    The documentation site: the guides, the walkthroughs, the error catalogue
    and the MCP connection steps.
  url: https://developers.investorlift.com
paths:
  /v3/coverage:
    get:
      tags:
        - dataset
      summary: Read which states the dataset serves
      description: >-
        Which states the dataset serves: each with its newest deed, the data end
        of its listing feed, its registry extract, its counties with their
        parcel counts and ZIPs, the row count of each served table and the gates
        of its build.


        Use it before a query. zip, county or lat with lng name a place: the
        states that carry it answer, and data.place says if the set serves it. A
        ZIP outside every county list answers 404 on the place routes. For the
        build ids alone use `/v3/build`.


        A call costs 0 credits.


        [The dataset of the Investorlift Data
        API](https://developers.investorlift.com/api-reference/dataset).
      operationId: getCoverage
      parameters:
        - schema:
            type: string
            pattern: ^[A-Z]{2}$
          in: query
          name: state
          required: false
          description: 'One state alone. Default: every served state.'
        - schema:
            type: string
            pattern: ^\d{5}$
          in: query
          name: zip
          required: false
          description: >-
            A place as one 5-digit ZIP: the states whose place index carries a
            parcel of the ZIP answer, and data.place says if the set serves it.
            Not with county, lat or lng.
        - schema:
            type: string
            pattern: ^\d{5}$
          in: query
          name: county
          required: false
          description: >-
            A place as one county by its 5-digit FIPS: the state whose place
            index carries the county answers, and data.place says if the set
            serves it. Not with zip, lat or lng.
        - schema:
            type: number
            minimum: -90
            maximum: 90
          in: query
          name: lat
          required: false
          description: >-
            A place as a point, with lng: the nearest parcel of the place index
            inside 2000 metres names its ZIP and its county, and data.place says
            if the set serves it. Not with zip or county.
        - schema:
            type: number
            minimum: -180
            maximum: 180
          in: query
          name: lng
          required: false
          description: Point longitude, with lat.
      responses:
        '200':
          description: >-
            The coverage of the dataset: each served state with its data ends,
            its counties, its counts and its gates, and the place the request
            named.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      states:
                        type: array
                        items:
                          $ref: '#/components/schemas/CoverageState'
                        description: >-
                          Every served state, in state order. With a place, the
                          states whose place index carries it, and none for a
                          place outside every served state.
                      place:
                        anyOf:
                          - $ref: '#/components/schemas/CoveragePlace'
                          - type: 'null'
                        description: >-
                          The place the request named, with served true or
                          false. Null without zip, county or a point.
                    required:
                      - states
                      - place
                    additionalProperties: false
                    description: The coverage of the dataset.
                  meta:
                    $ref: '#/components/schemas/DatasetMeta'
                required:
                  - data
                  - meta
                additionalProperties: false
                description: >-
                  The coverage of the dataset: each served state with its data
                  ends, its counties, its counts and its gates, and the place
                  the request named.
              example:
                data:
                  states:
                    - state: AZ
                      build_id: 5ca22a59
                      built_at: '2026-10-18T21:14:14.380Z'
                      published_at: '2026-10-18T21:29:36.244Z'
                      run_id: 1792358069
                      financing_as_of: '2026-06-25'
                      recordings_through: '2026-06-11'
                      financing_source: replay_887
                      str_as_of: '2026-10-18'
                      deeds_through: '2026-09-23'
                      listings_through: '2026-10-05'
                      registry_rows: 2812108
                      counties:
                        - fips: '04013'
                          n_parcels: 104479
                          zips:
                            - zip: '85031'
                              n_parcels: 6573
                            - zip: '85033'
                              n_parcels: 12998
                            - zip: '85037'
                              n_parcels: 15883
                            - zip: '85051'
                              n_parcels: 11931
                            - zip: '85345'
                              n_parcels: 18917
                            - zip: '85351'
                              n_parcels: 20844
                            - zip: '85379'
                              n_parcels: 17333
                      counts:
                        org: 2143986
                        reo: 16750
                        deal: 96068
                        lien: 20678
                        loan: 268039
                        agent: 16757
                        alias: 0
                        owner: 104476
                        party: 791856
                        entity: 2812108
                        filing: 7171397
                        holder: 53286
                        parcel: 104479
                        person: 3139655
                        search: 15502887
                        address: 104479
                        auction: 35690
                        channel: 129273
                        listing: 148619
                        org_str: 54
                        org_link: 4400431
                        purchase: 297577
                        agent_org: 84951
                        financing: 104465
                        loan_link: 268039
                        agent_edge: 4650
                        loan_party: 667766
                        str_parcel: 92
                        lender_name: 10239
                        listing_geo: 55260
                        org_profile: 474654
                        person_edge: 10709
                        counterparty: 302936
                        lender_place: 44089
                        place_seller: 95450
                        str_coverage: 47379
                        agent_listing: 130444
                        entity_holder: 1012374
                        parcel_search: 104479
                        deal_financing: 80662
                        lender_profile: 8801
                        person_sighting: 3385117
                        agent_person_org: 1221
                        borrower_profile: 209550
                        str_jurisdiction: 93
                        lender_place_link: 44089
                        marketplace_match: 12754
                        lender_counterparty: 588040
                        lender_link_profile: 8801
                      gates:
                        - step: '10'
                          gate: >-
                            L12 SOLD listings of ZIP 85033 since 2025 with a
                            dated sale that meet a purchase inside the window,
                            percent
                          value: '95.2'
                          bar: '>= 75'
                          pass: true
                        - step: '10'
                          gate: L12 links with no rule, no listing or no side
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '10'
                          gate: >-
                            L12 current listings with a holder deed after the
                            listing date beyond the tolerance
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '11'
                          gate: L11 agents joined to two persons
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '11'
                          gate: L11 persons with two agents
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '11'
                          gate: >-
                            L11 the golden self-listing agent is one person with
                            the roles agent and principal
                          value: '0'
                          bar: '= 1, or no golden row'
                          pass: true
                        - step: '12'
                          gate: >-
                            L13 sampled parcels of ZIP 85033 whose own line keys
                            to their address row, percent
                          value: '100'
                          bar: '>= 99'
                          pass: true
                        - step: '12'
                          gate: >-
                            L13 parcels of the state with a point and no address
                            row
                          value: '0'
                          bar: <= 2 percent of parcels
                          pass: true
                        - step: '12'
                          gate: >-
                            L13 a five-mile circle at the centre of ZIP 85033:
                            the band ranges count what the full scan counts
                          value: '17609'
                          bar: '= 17609'
                          pass: true
                        - step: '13'
                          gate: >-
                            L14 rows of the index out of order (the file is
                            sorted by the rotation)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '13'
                          gate: L14 persons with no row in the index
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: L16 (purchase, side, key) party rows with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: >-
                            G13 three-word person party displays that end in a
                            one-letter token (a vendor name the re-order
                            refused), percent
                          value: '0.01'
                          bar: < 2
                          pass: true
                        - step: '14'
                          gate: L16 party rows with no display
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: >-
                            G15 party keys with a leading TRUST and a last word
                            of the trust vocabulary (the class R3 rotates)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: >-
                            L16 buyer party rows of a flagged purchase whose
                            organization differs from the deal row of step 07
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: L16 deal rows of step 07 with no buyer party row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: >-
                            L16 (organization, counterparty, relation) rows with
                            two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: >-
                            L16 counterparty rows whose n_deeds_24m or n_zips
                            exceeds n_deeds (stage 3 of the lender routes plan)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '14'
                          gate: >-
                            L16 bought_from rows whose counterparty has a page
                            and no sold_to mirror
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: L25 (property, source, position) rows with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 loan rows with no lender name, no amount, no
                            recording date and no balance
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 paired rows whose twin is missing, is unpaired,
                            or carries another loan key
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 instrument rows against the distinct (loan key,
                            lender of record) pairs, the difference
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 is_loan rows against the distinct loan keys, the
                            difference
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 financing rows against the distinct parcels of
                            the landing, the difference
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 as_of values across the loan, lien and financing
                            files
                          value: '1'
                          bar: '= 1 (0 with financing_none)'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 recording dates after as_of, and
                            recordings_through after as_of
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: L25 parcels whose open rows exceed open_lien_count
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 enum words outside the closed lists (source,
                            term_band, product, product_basis, product_proxy,
                            label)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 blanket groups under the minimum, or with two
                            carriers or none
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 priced instruments above the amount outlier,
                            percent all time
                          value: '1.09'
                          bar: >-
                            0.5 to 3 (Arizona 1.06, MEASURED 2026-10-08;
                            Maricopa 1.26 on the old build, 2026-09-15)
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 history capture: open positions since 2022 with
                            a same-lender history row within 3 days, percent
                          value: '29.19'
                          bar: >-
                            12 to 35 (Arizona 28.18, MEASURED 2026-10-08;
                            Maricopa 17.8 and Seattle 20.0 on the old build,
                            2026-09-15)
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 reference: loan rows of ZIP 85033 shared with
                            ref_l25 on (property, source, position), percent of
                            the reference rows less the deleted parcels
                          value: NaN
                          bar: '>= 95 (Arizona 100, MEASURED 2026-10-08)'
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 reference: loan_key equality on the shared rows,
                            percent
                          value: NaN
                          bar: no bar, printed
                          pass: true
                        - step: '16'
                          gate: >-
                            L25 reference: in_both agreement on the shared rows,
                            percent
                          value: NaN
                          bar: no bar, printed
                          pass: true
                        - step: '17'
                          gate: >-
                            L28 parcels with two search rows, or parcels of 14e
                            with no search row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '17'
                          gate: L28 search rows with a flag outside the vocabulary
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '17'
                          gate: >-
                            L28 search rows with a dated flag and no financing
                            row, or a listing flag and no current listing
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '17'
                          gate: >-
                            L28 search rows whose short-term rental flags
                            disagree with their columns
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '17'
                          gate: >-
                            L28 search rows whose owner flags disagree with
                            their columns
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '18'
                          gate: L37 clusters with two heads after the closure
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '18'
                          gate: L38 person ids on two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '18'
                          gate: L38 sightings in two clusters
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '18'
                          gate: L38 person ids outside the state form
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '18'
                          gate: L38 step-11 person ids absent from every cluster
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '18'
                          gate: >-
                            L40 deed and borrower sightings joined to a second
                            source, percent
                          value: '0.94'
                          bar: printed
                          pass: true
                        - step: '01'
                          gate: L1 business rows of the delivery
                          value: '2812125'
                          bar: 2812125 +/- 5 %
                          pass: true
                        - step: '01'
                          gate: L1 principal rows of the delivery
                          value: '4854932'
                          bar: 4854932 +/- 5 %
                          pass: true
                        - step: '01'
                          gate: >-
                            L1 registry numbers on two rows of the source (one
                            row stays)
                          value: '15'
                          bar: <= 25
                          pass: true
                        - step: '01'
                          gate: L1 former names (229,891 on 2026-09-21)
                          value: '233546'
                          bar: 200000 to 260000
                          pass: true
                        - step: '02'
                          gate: L2 entities with a name and no name key
                          value: '8'
                          bar: <= 50
                          pass: true
                        - step: '02'
                          gate: >-
                            G1 company names whose display keys away from the
                            name, outside the housekeeping tails
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '02'
                          gate: >-
                            G2 person names whose display changes the order-free
                            key or the initials
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '02'
                          gate: G3 displays that change when displayed again
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '02'
                          gate: G4 names with a key and no display
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '02'
                          gate: >-
                            G5 displays with a lower-case letter, a period, a
                            double space, a stray space or a space before a
                            comma
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '02'
                          gate: >-
                            G5 company displays with a comma before a suffix
                            token, a spaced suffix at the end, a leading
                            rotation token or a listed tail
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '03'
                          gate: L3 kept edge rows
                          value: '1952457'
                          bar: '> 0'
                          pass: true
                        - step: '03'
                          gate: L3 entities with a kept edge
                          value: '1027830'
                          bar: '> 0'
                          pass: true
                        - step: '03'
                          gate: L3 person links above the cap of 100, per 10,000
                          value: '0'
                          bar: <= 50
                          pass: true
                        - step: '04'
                          gate: L4 each entity has one organization
                          value: '2812108'
                          bar: '= 2812108'
                          pass: true
                        - step: '04'
                          gate: L4 organizations with two or more entities
                          value: '296258'
                          bar: '> 0'
                          pass: true
                        - step: '04'
                          gate: L4 largest kept organization
                          value: '197'
                          bar: <= 200
                          pass: true
                        - step: '04'
                          gate: L4 refused components
                          value: '7'
                          bar: <= 25
                          pass: true
                        - step: '04'
                          gate: L4 entities in a refused component, per 10,000
                          value: '7'
                          bar: <= 100
                          pass: true
                        - step: 04b
                          gate: >-
                            L33 entity_holder rows whose match and holder entity
                            disagree (filed or former with no entity, none or
                            ambiguous with one)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 04b
                          gate: >-
                            L33 entity_holder duplicate rows over the entity,
                            the company key, the source, the role and the title
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 04b
                          gate: L33 entity_holder principal rows
                          value: '455440'
                          bar: '> 0'
                          pass: true
                        - step: '06'
                          gate: >-
                            L2 deed names that the old function changes: the
                            port gives the same key, percent
                          value: NaN
                          bar: '>= 99.5'
                          pass: true
                        - step: '06'
                          gate: >-
                            L2 deed names that the old function leaves alone:
                            the port leaves them alone too, percent
                          value: NaN
                          bar: '>= 99.5'
                          pass: true
                        - step: '06'
                          gate: >-
                            L5 deeds of ZIP 85033 in the raw cut against the
                            count of the stage database, percent
                          value: null
                          bar: 98 to 102
                          pass: true
                        - step: '06'
                          gate: >-
                            L6 document types of the state that the class list
                            does not hold
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '06'
                          gate: L6 deal ids that two purchases share
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '06'
                          gate: >-
                            L6 purchases of the old build for ZIP 85033 that
                            this step holds, percent
                          value: NaN
                          bar: '>= 99'
                          pass: true
                        - step: '06'
                          gate: >-
                            L6 the same arm's-length verdict on those purchases,
                            percent
                          value: NaN
                          bar: '>= 99'
                          pass: true
                        - step: '06'
                          gate: >-
                            L6 the same entity verdict (flag 1) on the
                            arm's-length ones, percent
                          value: NaN
                          bar: '>= 98'
                          pass: true
                        - step: '06'
                          gate: >-
                            L6 the same resale verdict (flag 3) on the
                            arm's-length ones, percent
                          value: NaN
                          bar: '>= 98'
                          pass: true
                        - step: 06b
                          gate: L22 distressed deeds with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 06b
                          gate: L22 auction rows with a kind outside the vocabulary
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 06b
                          gate: >-
                            L22 auction purchases of the kind NOT_AUCTION, or
                            with a failed test
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 06b
                          gate: >-
                            L22 REO purchases with no purchase row of 06, or two
                            rows for one deal
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 06b
                          gate: >-
                            L22 REO purchases whose take-back is after the
                            purchase or more than 36 months before it
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '07'
                          gate: L7 (deal, buyer key) pairs with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '07'
                          gate: >-
                            G6 deed-name organizations with two or more display
                            names on their deal rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '07'
                          gate: G4 deal rows with no display name
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '07'
                          gate: L7 organizations of org.parquet
                          value: '2143986'
                          bar: '= 2143986'
                          pass: true
                        - step: '07'
                          gate: >-
                            L7 display entities that are no entity of their
                            organization
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '07'
                          gate: L7 display entities of a deeds basis with no deed
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '07'
                          gate: >-
                            L7 company-like buyers of flagged purchases in ZIP
                            85033 that meet a registry entity, percent of rows
                          value: '55.25'
                          bar: '>= 50 continues, >= 80 continues with no list'
                          pass: true
                        - step: '08'
                          gate: L9 listing rows with a listing date and no status
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '08'
                          gate: L9 listing ids with two current versions
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '08'
                          gate: >-
                            L9 rows of the old served listing table of ZIP 85033
                            that this step holds, percent
                          value: NaN
                          bar: '>= 99, or no reference row'
                          pass: true
                        - step: '08'
                          gate: L9 the same listing date on those rows, percent
                          value: NaN
                          bar: '>= 99, or no reference row'
                          pass: true
                        - step: '08'
                          gate: L9 the same status on those rows, percent
                          value: NaN
                          bar: '>= 99, or no reference row'
                          pass: true
                        - step: '08'
                          gate: L9 the same asking price on those rows, percent
                          value: NaN
                          bar: '>= 99, or no reference row'
                          pass: true
                        - step: '08'
                          gate: L9 the same rental verdict on those rows, percent
                          value: NaN
                          bar: '>= 99, or no reference row'
                          pass: true
                        - step: '09'
                          gate: L10 agents whose folds carry two licences
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '09'
                          gate: L10 mentions of a person fold with no agent id
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '09'
                          gate: L10 agent ids on two rows of the agent file
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: '09'
                          gate: >-
                            L10 old agent ids of ZIP 85033 that map to ONE agent
                            here, percent
                          value: NaN
                          bar: '>= 90, or no reference row'
                          pass: true
                        - step: '09'
                          gate: >-
                            L10 the golden self-listing agent of the old build
                            maps to one agent
                          value: '0'
                          bar: '= 1, or no golden row'
                          pass: true
                        - step: '09'
                          gate: >-
                            L10 the golden two-spelling agent of the old build
                            maps to one agent
                          value: '0'
                          bar: '= 1, or no golden row'
                          pass: true
                        - step: 14b
                          gate: L17 address rows with no line or no ZIP code
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14b
                          gate: L17 (subject, source, address) rows with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14b
                          gate: >-
                            L17 organization rows whose organization has no
                            party row and no page
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14b
                          gate: L17 person rows whose person has no profile
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14b
                          gate: >-
                            L17 deed addresses of an organization that are the
                            parcel of that deed
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14b
                          gate: L17 kinds outside HOUSE, SUITE and POBOX
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: L18 organizations with two profile rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: >-
                            L18 profiles whose resale counts do not add up to
                            the resold purchases
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: >-
                            L18 profiles whose segments do not add up to the
                            purchases
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: L18 profiles whose windows are out of order
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: >-
                            L18 organizations of a deal of step 07 with no
                            profile
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: >-
                            L18 profiles whose auction or REO counts exceed the
                            purchases, or whose window exceeds the count
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: >-
                            L18 profiles with a price band and no quartile, or a
                            five-year band under five priced purchases
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: >-
                            L18 profiles whose quick-reseller purchases exceed
                            the 24-month purchases, or name a top reseller with
                            none, or none with some
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14c
                          gate: >-
                            L18 profiles whose 24-month band exceeds the priced
                            purchases or the 24-month purchases, or has a count
                            and no quartile, or a quartile and no count
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14d
                          gate: >-
                            G14 person buyers of the last purchase that meet the
                            roll owner order-free, whose deed name starts with
                            the roll surname, percent
                          value: '98.16'
                          bar: >-
                            >= 95 (below it: vendor_reorder_min_words=3,
                            decision D1 to the owner)
                          pass: true
                        - step: 14d
                          gate: L19 parcels with two owner rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14d
                          gate: L19 owner rows with no name or no key
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14d
                          gate: L19 owner rows with a basis outside the vocabulary
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14d
                          gate: L19 owner rows whose basis and whose deed disagree
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14d
                          gate: L19 owner rows held since after the data end
                          value: '4'
                          bar: '= 0'
                          pass: false
                        - step: 14d
                          gate: >-
                            L19 owner rows whose occupancy and whose absentee
                            mark disagree
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14d
                          gate: >-
                            L20 purchases of the old build for ZIP 85033 with a
                            deed of the cut on the same day, percent
                          value: null
                          bar: '>= 99.5'
                          pass: true
                        - step: 14e
                          gate: L21 parcels with two attribute rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14e
                          gate: L21 parcels of the cut with no attribute row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14e
                          gate: >-
                            L21 attribute rows whose segment is outside the
                            vocabulary
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14f
                          gate: L23 listings with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14f
                          gate: >-
                            L23 rows with a resolve, an outcome or a match
                            outside the vocabulary
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14f
                          gate: >-
                            L23 rows whose outcome and whose closing deed
                            disagree
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14f
                          gate: L23 closing deeds that are no purchase of step 06
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14f
                          gate: >-
                            L23 rows that carry a contract price, an offer or a
                            spread
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14g
                          gate: >-
                            L31 channel rows whose subject is no person and no
                            organization of the build
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14g
                          gate: >-
                            L31 phones that are not ten digits, or emails with
                            no at sign
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14g
                          gate: >-
                            L31 rows whose shared mark disagrees with the
                            holders of the value, or with two rows of one key
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14h
                          gate: >-
                            L32 place_seller rows whose quick resales, same-day
                            resales or known holds exceed the sales, or with a
                            median and no known hold, or a known hold and no
                            median
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14h
                          gate: >-
                            L32 place_seller rows of a shorter period that count
                            more sales than the longer period of the same seller
                            and ZIP code, or a period row with no all row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14i
                          gate: L29f parcels with two place rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14i
                          gate: L29f parcels whose point two polygons hold
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14i
                          gate: L29f parcels of the address file with no place row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14i
                          gate: L29f loaded places with no parcel
                          value: '4'
                          bar: '= 0'
                          pass: false
                        - step: 14j
                          gate: >-
                            L29a APN-keyed records of a source of 100 or more
                            that find a parcel, percent
                          value: '0'
                          bar: '>= 99'
                          pass: false
                        - step: 14j
                          gate: >-
                            L29a address-keyed records of a source of 100 or
                            more that find a parcel, percent
                          value: '0'
                          bar: '>= 88'
                          pass: false
                        - step: 14j
                          gate: >-
                            L29a licences whose address parcel sits on another
                            street than their APN parcel, percent
                          value: '0'
                          bar: <= 0.5
                          pass: true
                        - step: 14j
                          gate: >-
                            L29a records matched from a point near several
                            parcels
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14j
                          gate: L29a APN matches outside the county of their source
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14j
                          gate: L29c the record file carries no name of a person
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14j
                          gate: >-
                            L29e sources whose newest snapshot is 14 days or
                            more behind the clock
                          value: '0'
                          bar: notice
                          pass: true
                        - step: 14j
                          gate: L29e sources that failed their last fetch
                          value: '0'
                          bar: notice
                          pass: true
                        - step: 14k
                          gate: L29b attributed parcels outside LICENSED and PENDING
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: L29b business-use parcels with no attribution
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: >-
                            L29b parcels of a place that is not served with a
                            status
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: >-
                            L29b parcels with a null status outside a STALE
                            place
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: L29b parcel rows with no coverage row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: L29b coverage rows outside a loaded place
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: L29b NONE parcels that carry a match method
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: L29c the four files carry no column of a name
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: L29c manager values that do not read as a company
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: >-
                            L29c manager companies of the roll-up that do not
                            read as a company
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 14k
                          gate: L29d parcels with a record and no owner row
                          value: '0'
                          bar: notice
                          pass: true
                        - step: 14k
                          gate: >-
                            L29d business-use parcels whose hold has two holders
                            or more
                          value: '18'
                          bar: notice
                          pass: true
                        - step: 14k
                          gate: L29d business-use parcels with no hold
                          value: '18'
                          bar: notice
                          pass: true
                        - step: 14k
                          gate: >-
                            L29d advertised detections of each place, counted
                            and never served
                          value: '525'
                          bar: notice
                          pass: true
                        - step: 16b
                          gate: L26 spellings with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 spellings of the loan file with no identity row,
                            or with no organization id and no placeholder mark
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 keys of this step that differ from lender_key of
                            the loan file
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 lender organization ids outside the two forms
                            (the state and an entity number, or the state, name
                            and a key)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 registry matches whose entity is not in
                            org_member
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 dictionary rows with a null key, two canonicals
                            for one alias, or a chain
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 dictionary canonical keys that are the key of no
                            spelling of this state (a notice)
                          value: '1'
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 rename rows that a former name of the registry
                            covers (a notice: the next pull request drops them)
                          value: '4'
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: L26 truncated spellings merged by prefix (a notice)
                          value: '57'
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 truncated spellings ambiguous by prefix, kept
                            apart (a notice)
                          value: '8'
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 company-like spellings that meet a registry
                            entity, percent of loan rows
                          value: '67.01'
                          bar: '>= 50 (Arizona 63.38, MEASURED 2026-10-08)'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 spellings for each identity: the spellings
                            against the distinct organization ids
                          value: '1.163'
                          bar: >-
                            1.05 to 1.20 (Arizona 1.1109, MEASURED 2026-10-08;
                            the old fold 1.08 on Maricopa, 2026-09-14)
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 identities whose tags hold both bank and
                            government (a notice)
                          value: '1'
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 the 19 pinned readings of the old file 35a on
                            invented spellings
                          value: '19'
                          bar: '= 19'
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 reference: top 20 lenders of ZIP 85033 by loan
                            rows in ref_l25 whose spellings share one
                            organization
                          value: '0'
                          bar: >-
                            >= 10 of 20 (Arizona 12, MEASURED 2026-10-08: the
                            dictionary carries 120 of the 204 rows of the old
                            build)
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 reference: old lender ids whose spellings the
                            key splits over two organizations or more (a notice)
                          value: '0'
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 reference: organizations that span two old
                            lender ids or more (a notice)
                          value: '0'
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 lenders of 100 rows or more in 24 months whose
                            served name has a key that equals no spelling key,
                            of all such lenders (F2)
                          value: 11 of 67 lenders, 9.25 percent of their rows
                          bar: >-
                            1 to 25 percent of the lenders of 100 rows or more,
                            or no such lender (Arizona 62 lenders, 4.76 percent
                            of their rows, MEASURED 2026-10-17)
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 of them, lenders whose matched entity is not the
                            display entity of their organization (a notice, F2)
                          value: 11 lenders, 9.25 percent of their rows
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 of them, lenders whose spellings met the
                            registry by a former name alone (a notice, F2)
                          value: 0 lenders, 0.0 percent of their rows
                          bar: no bar, printed
                          pass: true
                        - step: 16b
                          gate: >-
                            L26 dictionary and prefix folds of this state whose
                            canonical spelling shares no content word with the
                            alias (a notice, F2)
                          value: '8'
                          bar: no bar, printed
                          pass: true
                        - step: 16c
                          gate: L27 lender keys with two organization ids
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: L27 organizations with two profile rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 windows out of order (n_loans_12m <= n_loans_24m
                            <= n_loans_36m <= n_loans)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 lenders whose n_recordings exceeds n_loans or
                            n_recordings_24m exceeds n_loans_24m, and place rows
                            whose n_recordings exceeds n
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 profile rows whose recorded_name is no spelling
                            of the organization
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 lender organizations with company_like true and
                            the tag person
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 profile rows whose n_loans is not the n of their
                            state all place row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: L27 (lender, grain, key, period) rows with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 place rows whose grain or period is outside the
                            closed lists, or whose key is not the state code
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 the state 24m bucket with geo_n = 0, or no state
                            24m bucket
                          value: '0'
                          bar: '= 0 (a slice with no loans is a fault of the replay)'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 lenders with an open book and a loan as the
                            lender of record whose state row carries no open
                            book
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 lenders with an open book and no loan as the
                            lender of record (a notice)
                          value: '81'
                          bar: no bar, printed
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 lenders with a quantile and fewer than 3 priced
                            rows in the window
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 the open book of a lender against its open rows,
                            the difference
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16c
                          gate: >-
                            L27 the top lender of the state by n_loans_24m,
                            share of the state 24m bucket, percent
                          value: '7.4'
                          bar: >-
                            3 to 10 (Arizona 5.72, MEASURED 2026-10-08; a credit
                            union held 6.54 on Maricopa, 2026-09-15)
                          pass: true
                        - step: 16c
                          gate: L27 lenders with the hard_money tag, count
                          value: '61'
                          bar: '>= 300 (Arizona 454, MEASURED 2026-10-08)'
                          pass: false
                        - step: 16c
                          gate: >-
                            L27 reference: top 20 lenders of ZIP 85033 by
                            24-month loans in ref_l25 that are in the top 20 of
                            the ZIP, of 20
                          value: '0'
                          bar: '>= 14 (Arizona 18, MEASURED 2026-10-08)'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 loan_party rows whose loan is not in the loan
                            file
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 (loan_key, source, position, side, party_key)
                            rows with two rows
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: L28 party rows with no display
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 recorded rows with a borrower string and no
                            borrower party row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 purpose, outcome, link_window, borrower_basis
                            and foreclosed_instrument words outside the closed
                            lists
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 purchase rows whose deed is outside the window,
                            or not_purchase rows with a deed
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 strict rows outside the strict window,
                            instruments with two deals, deals with two purchase
                            loans
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: L28 loose rows on a marketplace closing or on a pair
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 foreclosed rows whose take-back is inside the
                            floor, or resolved_on before the recording
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 lent_to rows with no borrowed_from mirror, or a
                            pair of one organization
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 lender counterparty rows whose n_deeds_24m or
                            n_zips exceeds n_deeds, or whose window_end is not
                            as_of (stage 3 of the lender routes plan)
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 place rows without a link row, and link rows
                            without a place row
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 link rows whose n_investor_loans exceeds n of
                            their place row, whose n_investor_recordings exceeds
                            n_investor_loans, or whose investor organizations
                            and investor loans disagree on zero
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 lenders whose n_investor_loans of the state 24m
                            link row differs from n_investor_loans_24m of their
                            link profile
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 borrower profile rows with two rows for one
                            org_id
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 organizations whose n_lenders differs from their
                            borrowed_from rows of lender_counterparty
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 organizations whose n_loans differs from the
                            distinct loan keys of their borrower rows of
                            loan_party
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 organizations whose top_lender_org_id differs
                            from their first borrowed_from row by n_deeds desc,
                            then the id
                          value: '0'
                          bar: '= 0'
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 deed-name lender organizations whose spelling
                            keys to the buyer key of a deal row under another
                            organization (a notice, F6)
                          value: '54'
                          bar: no bar, printed
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 the purchase share of history rows since 2015,
                            percent
                          value: '8.05'
                          bar: >-
                            4 to 9 (Arizona 5.21, MEASURED 2026-10-08; Maricopa
                            6.1 on the old build, 2026-09-14)
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 borrower keys for each recorded row with a
                            borrower
                          value: '1.51'
                          bar: >-
                            1.1 to 2.0 (Arizona 1.61, MEASURED 2026-10-08;
                            Maricopa 1.30 on the old build, 2026-09-15)
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 borrower keys of strict-linked loans that are a
                            buyer key of the deal, percent
                          value: '67.65'
                          bar: >-
                            >= 65 (Arizona 71.54, MEASURED 2026-10-08; Maricopa
                            77.1 on 11,971 rows of the old build, 2026-09-15)
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 reference: purpose agreement with ref_l25 on the
                            shared rows of ZIP 85033, percent
                          value: null
                          bar: no bar, printed
                          pass: true
                        - step: 16d
                          gate: >-
                            L28 reference: both linked to a deal or both not, on
                            the shared rows of ZIP 85033, percent
                          value: null
                          bar: no bar, printed
                          pass: true
                        - step: '15'
                          gate: L16 deal buyers whose organization is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 counterparties whose organization is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 current listings without a point
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 agent listings whose agent is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 persons whose agent is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 entity_holder rows whose entity is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 entity_holder rows whose holder entity is
                            missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 loans whose lender organization is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 lender profiles whose organization is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 lender places whose profile is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 lender counterparty rows whose lender has no
                            profile
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 lender link profiles whose profile is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 loan links whose loan row is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 lender place links whose place row is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: L16 borrower profiles whose organization is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 display names of org and entity that are not
                            upper case or hold a period
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 alias rows whose new id is absent from the table
                            of its kind
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 person ids outside the state form, and sightings
                            whose person is missing
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 party display values outside the shape of a
                            display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 deal display values outside the shape of a
                            display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 loan_party display values outside the shape of a
                            display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 person display values outside the shape of a
                            display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 agent display values outside the shape of a
                            display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 lender_profile display values outside the shape
                            of a display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 owner display values outside the shape of a
                            display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: >-
                            L16 search display values outside the shape of a
                            display form
                          value: '0'
                          bar: '0'
                          pass: true
                        - step: '15'
                          gate: 'L24 org: rows against the previous set, percent'
                          value: '100.00'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: 'L24 entity: rows against the previous set, percent'
                          value: '100.00'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: 'L24 filing: rows against the previous set, percent'
                          value: '100.00'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: >-
                            L24 entity_holder: rows against the previous set,
                            percent
                          value: '100.00'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: 'L24 person: rows against the previous set, percent'
                          value: '96.34'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: 'L24 org_link: rows against the previous set, percent'
                          value: '100.00'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: 'L24 deal: rows against the previous set, percent'
                          value: '5.34'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 party: rows against the previous set, percent'
                          value: '4.65'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 counterparty: rows against the previous set,
                            percent
                          value: '4.27'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 purchase: rows against the previous set, percent'
                          value: '4.64'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 agent: rows against the previous set, percent'
                          value: '20.65'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 agent_org: rows against the previous set,
                            percent
                          value: '4.03'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 agent_listing: rows against the previous set,
                            percent
                          value: '3.72'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 listing: rows against the previous set, percent'
                          value: '3.88'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 listing_geo: rows against the previous set,
                            percent
                          value: '4.48'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 address: rows against the previous set, percent'
                          value: '3.49'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 holder: rows against the previous set, percent'
                          value: '4.63'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 search: rows against the previous set, percent'
                          value: '92.45'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: 'L24 alias: rows against the previous set, percent'
                          value: '0.00'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 agent_edge: rows against the previous set,
                            percent
                          value: '6.98'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 person_edge: rows against the previous set,
                            percent
                          value: '12.86'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 agent_person_org: rows against the previous set,
                            percent
                          value: '15.38'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 channel: rows against the previous set, percent'
                          value: '41.13'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 place_seller: rows against the previous set,
                            percent
                          value: '5.42'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 org_profile: rows against the previous set,
                            percent
                          value: '4.93'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 owner: rows against the previous set, percent'
                          value: '3.49'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 parcel: rows against the previous set, percent'
                          value: '3.49'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 auction: rows against the previous set, percent'
                          value: '7.14'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 reo: rows against the previous set, percent'
                          value: '7.55'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 marketplace_match: rows against the previous
                            set, percent
                          value: '100.00'
                          bar: '>= 90'
                          pass: true
                        - step: '15'
                          gate: 'L24 loan: rows against the previous set, percent'
                          value: '4.26'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 financing: rows against the previous set,
                            percent
                          value: '3.49'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 lien: rows against the previous set, percent'
                          value: '6.18'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 lender_name: rows against the previous set,
                            percent
                          value: '7.35'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 lender_profile: rows against the previous set,
                            percent
                          value: '7.02'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 lender_place: rows against the previous set,
                            percent
                          value: '4.46'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 loan_link: rows against the previous set,
                            percent
                          value: '4.26'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 loan_party: rows against the previous set,
                            percent
                          value: '4.11'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 deal_financing: rows against the previous set,
                            percent
                          value: '5.68'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 lender_counterparty: rows against the previous
                            set, percent
                          value: '4.12'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 lender_link_profile: rows against the previous
                            set, percent
                          value: '7.02'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 lender_place_link: rows against the previous
                            set, percent
                          value: '4.46'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 borrower_profile: rows against the previous set,
                            percent
                          value: '4.22'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 str_parcel: rows against the previous set,
                            percent
                          value: '1.64'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 str_coverage: rows against the previous set,
                            percent
                          value: '6.97'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 str_jurisdiction: rows against the previous set,
                            percent
                          value: '86.92'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: 'L24 org_str: rows against the previous set, percent'
                          value: '1.75'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 parcel_search: rows against the previous set,
                            percent
                          value: '3.49'
                          bar: '>= 90'
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 deal ids gone with no alias, percent of the
                            previous ids
                          value: '94.34'
                          bar: <= 5
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 agent ids gone with no alias, percent of the
                            previous ids
                          value: '80.21'
                          bar: <= 5
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 person ids gone with no alias, percent of the
                            previous ids
                          value: '100.00'
                          bar: <= 5
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 deed-name organization ids gone with no alias,
                            percent of the previous ids
                          value: '95.10'
                          bar: <= 5
                          pass: false
                        - step: '15'
                          gate: >-
                            L24 top buyers of ZIP 85033 shared by the previous
                            set and this one, of 20
                          value: '20'
                          bar: '>= 14'
                          pass: true
                        - step: '15'
                          gate: >-
                            L24 top lenders of ZIP 85033 shared by the previous
                            set and this one, of 20
                          value: '20'
                          bar: '>= 14'
                          pass: true
                  place: null
                meta:
                  generated_at: '2026-10-19T00:21:08.168Z'
                  coverage: []
                  terms: >-
                    Data: Investorlift Data Services. Public-record and MLS
                    listing data licensed through BatchData; municipal
                    short-term rental registries; Investorlift marketplace
                    records. Attribution and data-use terms:
                    https://developers.investorlift.com/guides/terms
                  build:
                    states:
                      - state: AZ
                        build_id: 5ca22a59
                        built_at: '2026-10-18T21:14:14.380Z'
                        published_at: '2026-10-18T21:29:36.244Z'
                        run_id: 1792358069
                        financing_as_of: '2026-06-25'
                        recordings_through: '2026-06-11'
                        financing_source: replay_887
                        str_as_of: '2026-10-18'
                      - state: CA
                        build_id: null
                        built_at: '2026-09-24T01:58:30.453Z'
                        published_at: '2026-09-24T03:15:56.838Z'
                        run_id: 1790215190
                        financing_as_of: null
                        recordings_through: null
                        financing_source: null
                        str_as_of: null
                      - state: FL
                        build_id: 0e5fa9bc
                        built_at: '2026-09-24T15:08:23.506Z'
                        published_at: '2026-09-24T18:59:42.805Z'
                        run_id: 1790262682
                        financing_as_of: null
                        recordings_through: null
                        financing_source: null
                        str_as_of: null
                      - state: TX
                        build_id: 775ed08d
                        built_at: '2026-09-24T11:08:10.587Z'
                        published_at: '2026-09-24T13:16:03.157Z'
                        run_id: 1790248213
                        financing_as_of: null
                        recordings_through: null
                        financing_source: null
                        str_as_of: null
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Rows:
              $ref: '#/components/headers/X-Rows'
            X-Dataset-Version:
              $ref: '#/components/headers/X-Dataset-Version'
            X-Data-End:
              $ref: '#/components/headers/X-Data-End'
        '400':
          description: Bad request (unknown_parameter, validation_error)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                unknown_parameter:
                  summary: Unknown parameter
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#unknown_parameter
                    title: Unknown parameter
                    status: 400
                    code: unknown_parameter
                    detail: >-
                      The query carries a parameter this endpoint does not
                      define: kind[]. Write the list as kind=flip,hold or as
                      repeated keys.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: kind[]
                        message: unknown parameter
                        code: unknown_parameter
                validation_error:
                  summary: Validation error
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#validation_error
                    title: Validation error
                    status: 400
                    code: validation_error
                    detail: radius_miles must be 20 or less.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: radius_miles
                        message: must be 20 or less
                        code: too_big
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '401':
          description: Unauthorized (unauthorized)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                unauthorized:
                  summary: Unauthorized
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#unauthorized
                    title: Unauthorized
                    status: 401
                    code: unauthorized
                    detail: 'Send Authorization: Bearer with a current key.'
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '403':
          description: Forbidden (payment_overdue)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                payment_overdue:
                  summary: Payment overdue
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#payment_overdue
                    title: Payment overdue
                    status: 403
                    code: payment_overdue
                    detail: >-
                      The subscription's payment is overdue and the grace period
                      passed. Update the card under Manage Billing in the
                      developer console.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '406':
          description: Not acceptable (not_acceptable)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                not_acceptable:
                  summary: Not acceptable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#not_acceptable
                    title: Not acceptable
                    status: 406
                    code: not_acceptable
                    detail: >-
                      Accept text/html names no representation this endpoint
                      produces (application/json).
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '429':
          description: Rate limited, with Retry-After (rate_limited)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                rate_limited:
                  summary: Rate limited
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#rate_limited
                    title: Rate limited
                    status: 429
                    code: rate_limited
                    detail: >-
                      The request exceeded the per-key budget. Retry in 12
                      seconds.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    retry_after: 12
                    bucket: key
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '500':
          description: Internal error (internal_error)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                internal_error:
                  summary: Internal error
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#internal_error
                    title: Internal error
                    status: 500
                    code: internal_error
                    detail: The request failed. Quote request_id when you report it.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '503':
          description: >-
            Unavailable, with Retry-After on pool_saturated and
            ledger_unavailable (database_unavailable, pool_saturated)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                database_unavailable:
                  summary: Database unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#database_unavailable
                    title: Database unavailable
                    status: 503
                    code: database_unavailable
                    detail: >-
                      The service failed to reach the database and did not run
                      the request.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                pool_saturated:
                  summary: Pool saturated
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#pool_saturated
                    title: Pool saturated
                    status: 503
                    code: pool_saturated
                    detail: >-
                      No pooled connection was free. The service did not run the
                      request.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '504':
          description: Statement timeout (statement_timeout)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                statement_timeout:
                  summary: Statement timeout
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#statement_timeout
                    title: Statement timeout
                    status: 504
                    code: statement_timeout
                    detail: >-
                      The query exceeded the 10 second statement timeout. Narrow
                      the geometry or filters.
                    instance: /v3/coverage
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
components:
  schemas:
    CoverageState:
      type: object
      properties:
        state:
          type: string
          pattern: ^[A-Z]{2}$
          description: The 2-letter state code of a served state, for example AZ.
        build_id:
          description: >-
            The id of the build of the files, a hash of the recorded steps. Null
            while the files of the state are a trial and no build id exists.
          type:
            - string
            - 'null'
        built_at:
          anyOf:
            - type: string
              format: date-time
              description: Timestamp, ISO 8601.
            - type: 'null'
          description: >-
            When the last step of the build finished, ISO 8601. Null while the
            files carry no record.
        published_at:
          type: string
          format: date-time
          description: When the publish of the state wrote the served tables, ISO 8601.
        run_id:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The id of the publish that serves the rows of the state. It moves
            with each publish.
        financing_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the financing slice of the state, the newest applied
            drop of the county records: the clock of every lender window,
            YYYY-MM-DD. Null while the state has no financing slice.
        recordings_through:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The newest recording date of a loan of the slice, YYYY-MM-DD. Null
            while the state has no financing slice.
        financing_source:
          description: >-
            Where the financing slice came from: replay_887 for the replay of
            the archive of the feed, weekly when the weekly delivery carries the
            domains again. Null while the state has no financing slice.
          type:
            - string
            - 'null'
        str_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The short-term rental snapshot of the state, YYYY-MM-DD: the oldest
            snapshot date over the places this API serves, so no served status
            is older than it. Each place carries its own date on GET
            /v3/coverage. Null while the state has no short-term rental tables.
        deeds_through:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the newest deed of the state, YYYY-MM-DD. Null while the
            deed side is not built.
        listings_through:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The data end of the listing feed of the state, YYYY-MM-DD. Null
            while the listing side is not built.
        registry_rows:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The entities of the business registry extract. Null for a state with
            no extract.
        counties:
          type: array
          items:
            $ref: '#/components/schemas/County'
          description: The counties of the state in the place index, by FIPS.
        counts:
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: integer
            minimum: -9007199254740991
            maximum: 9007199254740991
          description: The rows of each served table of the state, by table.
        gates:
          type: array
          items:
            $ref: '#/components/schemas/Gate'
          description: The gates of the build, by step.
      required:
        - state
        - build_id
        - built_at
        - published_at
        - run_id
        - financing_as_of
        - recordings_through
        - financing_source
        - str_as_of
        - deeds_through
        - listings_through
        - registry_rows
        - counties
        - counts
        - gates
      description: >-
        One served state: its build, its publish, its data ends, its counties,
        its row counts and its gates.
    CoveragePlace:
      type: object
      properties:
        kind:
          type: string
          enum:
            - zip
            - county
            - point
          description: 'What the request named: a ZIP, a county or a point.'
        zip:
          description: >-
            The 5-digit ZIP of the place. Null for a county, and for a point
            outside every served state.
          type:
            - string
            - 'null'
        county_fips:
          description: >-
            The county of the place, 5 digits. Null for a place outside every
            served state.
          type:
            - string
            - 'null'
        state:
          description: >-
            The served state that carries the place. Null for a place outside
            every served state. A ZIP that two states carry names the one with
            the most parcels of it.
          type:
            - string
            - 'null'
        served:
          type: boolean
          description: >-
            True when the place index of a served state carries a parcel of the
            place. False for a place outside every served state, and for a ZIP
            of a served state with no parcel, for example a post office box ZIP.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The parcels of the place in the place index: the parcels of the ZIP,
            or of the county. Null when served is false.
      required:
        - kind
        - zip
        - county_fips
        - state
        - served
        - n_parcels
      additionalProperties: false
      description: >-
        The place the request named and what the set holds there. The coverage
        says what the set holds, not what the state contains.
    DatasetMeta:
      type: object
      properties:
        generated_at:
          type: string
          format: date-time
          description: >-
            When the API produced this response, ISO 8601. It does not change
            the ETag.
        weights:
          description: >-
            The effective match weights of a route that scores a match, one per
            factor, rounded to 4 decimals. Absent on every route of the served
            set.
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: number
        reference_point:
          description: >-
            The point the API measures every distance in the response from: lat
            + lng, or the centre of the property_id parcel. Absent with a bare
            bbox.
          type: object
          properties:
            lat:
              type: number
              minimum: -90
              maximum: 90
              description: Latitude of the reference point.
            lng:
              type: number
              minimum: -180
              maximum: 180
              description: Longitude of the reference point.
          required:
            - lat
            - lng
          additionalProperties: false
        geometry:
          $ref: '#/components/schemas/MetaGeometry'
          description: >-
            The place that ran, defaults filled and keyed as the query is (see
            MetaGeometry). Present on every route that takes a place: the deals,
            the pins, the cells, the summary, the buyers and the listings. Copy
            it back as the query to repeat the request.
        resolved_from:
          description: >-
            Present when the id in the path was an old id of an earlier build:
            the ids the API followed through the alias table, in order. Store
            the id the response carries.
          type: array
          items:
            type: string
        coverage:
          type: array
          items:
            $ref: '#/components/schemas/Coverage'
          description: >-
            Empty on every route: the served set carries states, not markets,
            and meta.build.states[] lists them.
        dated:
          description: >-
            Absent on every route of the served set: no block of it is a dated
            snapshot.
          type: array
          items:
            $ref: '#/components/schemas/Dated'
        terms:
          type: string
          description: Attribution and data-use terms for the data in this response.
        build:
          type: object
          properties:
            states:
              type: array
              items:
                $ref: '#/components/schemas/BuildState'
              description: Every served state, in state order.
          required:
            - states
          additionalProperties: false
          description: >-
            The publishes behind the response. The ETag and each cursor follow
            the newest publish, so a publish ends every cursor. The rows belong
            to no market of the deed registry, so meta.coverage is empty.
      required:
        - generated_at
        - coverage
        - terms
        - build
      additionalProperties: false
      description: >-
        Response metadata of the /v3 family: when the API produced it, and the
        publishes behind the rows.
    Problem:
      type: object
      properties:
        type:
          type: string
          description: >-
            URI of the problem: the Errors page of the documentation site,
            anchored at the code.
        title:
          type: string
          description: Short human-readable summary of the problem code.
        status:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: HTTP status.
        code:
          type: string
          description: >-
            Stable machine-readable code from the catalogue at
            https://developers.investorlift.com/problems.json.
        detail:
          type: string
          description: Human-readable explanation specific to this occurrence.
        instance:
          type: string
          description: Request path.
        request_id:
          type: string
          description: Request id to quote when you report a problem.
        errors:
          description: Per-parameter validation failures (400 only).
          type: array
          items:
            type: object
            properties:
              param:
                description: >-
                  The offending parameter. Null when the problem is not about
                  one parameter.
                type:
                  - string
                  - 'null'
              message:
                type: string
                description: What is wrong with it.
              code:
                type: string
                description: Machine-readable reason, for example invalid_enum_value.
            required:
              - param
              - message
              - code
            additionalProperties: false
            description: One validation failure.
      required:
        - type
        - title
        - status
        - code
        - detail
        - instance
        - request_id
      additionalProperties: {}
      description: >-
        RFC 9457 problem details (application/problem+json). Some codes add
        extra fields beside these: superseded_by, candidates, n_deals, cap,
        suggestion, markets, retry_after.
    County:
      type: object
      properties:
        fips:
          type: string
          description: The county FIPS, 5 digits.
        n_parcels:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The parcels of the county in the place index.
        zips:
          type: array
          items:
            $ref: '#/components/schemas/CountyZip'
          description: >-
            The ZIPs of the county with a parcel in the place index, by code:
            the ZIPs a place route answers for. Empty on a build row the publish
            wrote before the ZIPs were recorded.
      required:
        - fips
        - n_parcels
        - zips
      additionalProperties: false
      description: One county of a served state with its parcel count and its ZIPs.
    Gate:
      type: object
      properties:
        step:
          type: string
          description: The step of the build.
        gate:
          type: string
          description: The name of the gate.
        value:
          description: The value the gate measured. Null when the file carries none.
          type:
            - string
            - 'null'
        bar:
          description: >-
            The bar the gate holds the value to. Null when the file carries
            none.
          type:
            - string
            - 'null'
        pass:
          type: boolean
          description: True when the gate passed.
      required:
        - step
        - gate
        - value
        - bar
        - pass
      additionalProperties: false
      description: One gate of the build of a state.
    MetaGeometry:
      type: object
      properties:
        kind:
          type: string
          enum:
            - radius
            - bbox
            - place
          description: >-
            Which location ran: radius, bbox or place. A radius uses a point, a
            parcel ID, or a resolved address. A bbox is a viewport. A place is a
            ZIP list or a postal city.
        lat:
          anyOf:
            - type: number
              minimum: -90
              maximum: 90
              description: WGS84 latitude.
            - type: 'null'
          description: >-
            The centre of the radius, or the reference point you gave beside a
            bbox or a place. For a property_id request the centre is the parcel
            centroid. Null when a bbox or a place had no reference point.
        lng:
          anyOf:
            - type: number
              minimum: -180
              maximum: 180
              description: WGS84 longitude.
            - type: 'null'
          description: The longitude beside lat. Null when lat is null.
        radius_miles:
          description: >-
            The radius that ran, in miles: the value you sent, or the default
            when you sent none. Null for a bbox or a place.
          type:
            - number
            - 'null'
        bbox:
          anyOf:
            - type: array
              prefixItems:
                - type: number
                  minimum: -180
                  maximum: 180
                  description: West edge (longitude).
                - type: number
                  minimum: -90
                  maximum: 90
                  description: South edge (latitude).
                - type: number
                  minimum: -180
                  maximum: 180
                  description: East edge (longitude).
                - type: number
                  minimum: -90
                  maximum: 90
                  description: North edge (latitude).
              items: false
              minItems: 4
              maxItems: 4
              description: '[west, south, east, north] in WGS84 degrees.'
            - type: 'null'
          description: >-
            The viewport as [west, south, east, north] in WGS84 degrees. Null
            unless kind is bbox.
        property_id:
          anyOf:
            - type: string
              pattern: ^prop_[0-9a-f]{32}$
              description: >-
                Parcel id: prop_ followed by 32 hex characters, for example
                prop_e93c776c53354a88de4e58448a6bf21b. The prefix is part of the
                id.
            - type: 'null'
          description: >-
            The parcel at the centre of the radius. Null unless the request
            named property_id.
        address:
          description: >-
            Resolved situs line for an address search. Null for other location
            forms. This field describes the resolved parcel.
          type:
            - string
            - 'null'
        zip:
          anyOf:
            - type: array
              items:
                type: string
                pattern: ^\d{5}$
            - type: 'null'
          description: >-
            The ZIP list as you sent it, for example ["85251", "85257"]. Null
            unless kind is place and the request named ZIPs.
        city:
          description: >-
            The postal city as the API compared it: trimmed and folded to upper
            case ("Scottsdale" ran as "SCOTTSDALE"). Null unless kind is place
            and the request named a city.
          type:
            - string
            - 'null'
        location_radius_m:
          description: >-
            Present when the property at the centre is listed on Investorlift.
            Then lat and lng are an approximate point, address is null, and this
            value is the radius in metres of the circle that contains the true
            point. The API measures each distance from the true point.
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
      required:
        - kind
        - lat
        - lng
        - radius_miles
        - bbox
        - property_id
        - address
        - zip
        - city
      additionalProperties: false
      description: >-
        The location the API computed the response over, as it ran: defaults
        filled, a parcel resolved to its centroid, a city folded. Copy it back
        as the query to repeat the request.
    Coverage:
      type: object
      properties:
        market:
          type: string
          description: Market code, for example phx. One entry per loaded market.
        state:
          type: string
          description: >-
            2-letter state of the market. The loaded markets and their states
            are in meta.coverage[].
        counties:
          type: array
          items:
            type: object
            properties:
              fips:
                type: string
                description: The 5-digit county FIPS code, for example 04013.
              name:
                type: string
                description: County name, for example Maricopa.
              data_end:
                anyOf:
                  - type: string
                    format: date
                    description: Calendar date, YYYY-MM-DD.
                  - type: 'null'
                description: >-
                  The last deed date on file for this county, YYYY-MM-DD. Null
                  when the county carries no dated deed.
            required:
              - fips
              - name
              - data_end
            additionalProperties: false
            description: One county the loaded area lies in.
          description: >-
            The counties the loaded area lies in, each with its own data end
            date. For a zip market the list names the county, but the loaded
            area is only the ZIP (see universe_kind).
        bbox:
          type: array
          prefixItems:
            - type: number
              minimum: -180
              maximum: 180
              description: West edge (longitude).
            - type: number
              minimum: -90
              maximum: 90
              description: South edge (latitude).
            - type: number
              minimum: -180
              maximum: 180
              description: East edge (longitude).
            - type: number
              minimum: -90
              maximum: 90
              description: North edge (latitude).
          items: false
          minItems: 4
          maxItems: 4
          description: >-
            The rectangle (west, south, east, north) that encloses every deal in
            the market: the initial map viewport and, with
            point_tolerance_miles, the limit for outside_coverage.
        data_end:
          type: string
          format: date
          description: >-
            The last deed date in the data, YYYY-MM-DD. The API measures every
            "days since" value from this data_end, never from the request time.
        build_run_id:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Which pipeline build produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
        registry_run:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Which investor registry run produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
        registry_version:
          description: >-
            Which registry code version produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
          type:
            - string
            - 'null'
        dataset_version:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Version of the loaded data, an integer that grows with every
            refresh. It is the cache key and the ETag, and every cursor binds to
            it.
        loaded_at:
          type: string
          format: date-time
          description: When this data version went live, ISO 8601.
        metro_buy_to_resale_ratio:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The median of purchase price divided by resale price over the
            market's priced flips since 2021. For example, 0.72 means flippers
            pay about 72% of the resale price. The price_fit factor uses it when
            an investor has too few flips of their own. Null when no priced
            flips exist.
        universe_kind:
          anyOf:
            - type: string
              enum:
                - zip
                - county
                - metro
              description: >-
                The area every count in this market covers: metro, county or
                zip. A metro market covers whole counties. A county market
                covers one county. The market cannot see what an investor did in
                the neighbouring counties. A zip market covers one or more ZIP
                codes. The market cannot see what an investor did outside them,
                a larger gap. In a county or zip market every investor count,
                price band, scale tier and confidence is a floor.
            - type: 'null'
          description: >-
            Null when the market row does not record it, a seed older than the
            column. The area every count in this market covers: metro, county or
            zip. A metro market covers whole counties. A county market covers
            one county. The market cannot see what an investor did in the
            neighbouring counties. A zip market covers one or more ZIP codes.
            The market cannot see what an investor did outside them, a larger
            gap. In a county or zip market every investor count, price band,
            scale tier and confidence is a floor.
        universe_zips:
          anyOf:
            - type: array
              items:
                type: string
                description: A 5-digit ZIP.
            - type: 'null'
          description: >-
            The ZIP codes of a zip universe, for example ["77088"]. Null for
            county and metro markets.
        point_tolerance_miles:
          type: number
          description: >-
            How far outside bbox a point can lie and get an answer, in miles: 20
            for a metro, 2 for a county market. The point is lat + lng, or the
            centre of a property_id parcel. Farther out, the API answers 422
            outside_coverage. A bbox must intersect the coverage bbox.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels in the loaded area, the universe every count covers. Null
            when the data does not record it.
        listings_data_end:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The as-of date of the MLS listing feed for this market, YYYY-MM-DD:
            the newest status update among its listing rows, later than
            data_end. The deeds and the listings arrive in one delivery, each
            with its own end. The API measures every listing window
            (days_on_market, n_listed_12m) against this date. Null when this
            market has no published listing tables. Every listing block and
            listings rollup is null then, and the correct reading is "no listing
            data".
        agents_data_end:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The as-of date of the listing set behind the agent registry of this
            market, YYYY-MM-DD. It equals listings_data_end when the registry is
            current. It is earlier when a refresh moved the listings but left
            the agents on the older set. Null when this market has no published
            agent tables. Then every agent_id, identity_basis and
            agent_is_holder_member on the listing agents is null, and the
            investor profile carries has_licensed_member and agent_links null.
            The /v1/agents routes then answer 422 agents_unavailable.
        wholesale_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the Investorlift export behind the market's wholesale
            transactions, YYYY-MM-DD. Every Investorlift listing published up to
            this date is on file. The API measures every wholesale window
            (n_listed_12m, n_bought_via_investorlift_12m) against the deed
            data_end. Null when this market has no published wholesale tables.
            Then every wholesale_listing block on deal rows, wholesale_purchases
            block on investor rows and wholesale_listings[] on a parcel is null.
            Then /v1/wholesale-listings, /v1/wholesalers,
            `/v1/investors/{id}/wholesale-purchases` and the source=investorlift
            and bought_on_investorlift filters answer 422 wholesale_unavailable.
        str_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The short-term rental snapshot of this market, YYYY-MM-DD: the
            oldest snapshot date over the places the API serves. Null when this
            market has no short-term rental tables. This block belongs to the
            first build, whose routes left on 2026-10-09, so no route reads it.
            meta.build.states[].str_as_of is the stamp of the dataset.
        str:
          anyOf:
            - type: object
              properties:
                jurisdictions:
                  type: array
                  items:
                    $ref: '#/components/schemas/StrCoverageJurisdiction'
                  description: >-
                    Every city of the market the short-term rental build knows,
                    served or not. This list, not the parcel, explains a null
                    block on a parcel: read the city's coverage_reason.
              required:
                - jurisdictions
              additionalProperties: false
            - type: 'null'
          description: >-
            The short-term rental jurisdiction table of this market. Null when
            this market has no published short-term rental tables.
        auction_counted:
          type: boolean
          description: >-
            True when this market measures the foreclosure-auction and REO
            purchase counts. Then every investor row carries the auction block
            (investor.auction) and deal rows carry bought_auction_kind. False
            when the market's registry build came before the counts existed.
            Then the block is null on every investor of the market, and
            bought_auction_kind is null on every deal. The buys_at_auction,
            buys_reo and bought_auction_kind filters then answer 422
            auction_unavailable.
        parcel_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end that the build of the parcel product layer used,
            YYYY-MM-DD. The layer serves POST /v1/properties/search and the
            financing, permit and history routes. Null when this market has no
            published parcel product tables: those routes then answer 422
            parcels_unavailable.
        address_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end of the address table behind GET
            /v1/properties/resolve?address, YYYY-MM-DD. Null when this market
            has no published address table. The address lookup answers 422
            addresses_unavailable while no market carries the table.
        parcel:
          anyOf:
            - $ref: '#/components/schemas/ParcelCoverage'
            - type: 'null'
          description: >-
            What the parcel products cover in this market. The parts are the
            layer, the dated financing slice, the permit snapshot, the Owner
            Profile block and the history lake with its ZIP set. Null when this
            market has no published parcel product tables.
        lenders:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The slice date behind the lender registry, YYYY-MM-DD. It
                    equals parcel.financing.as_of. Null when the registry row
                    does not record it.
                recordings_through:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The newest recording date in either source table,
                    YYYY-MM-DD. The API measures every recency on a lender
                    against this date. Null when the registry row does not
                    record it.
                counties:
                  type: array
                  items:
                    type: string
                    description: A 5-digit county FIPS.
                  description: >-
                    The counties the lender registry covers. A ZIP, city or
                    county outside them answers 422 outside_coverage.
                history_capture_share:
                  anyOf:
                    - type: number
                      description: Decimal ratio, never a percentage (0.53 = +53%).
                    - type: 'null'
                  description: >-
                    The share of open lien positions recorded since 2022 that
                    the recorded history also carries within 3 days, 0 to 1. It
                    says how much of the open table the history sees. Null when
                    the registry did not measure it.
                n_lender_ids:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Lender ids served in the market: the identities with a
                    profile, after the person gate. parcel.financing.n_lenders
                    counts raw spellings, several per id. Null when the registry
                    row does not record it.
                purchase_measured:
                  type: boolean
                  description: >-
                    True when the market has the deed link. Then the API serves
                    purpose and the deed block on the loan rows, and the
                    purchase-money counts and ranks on the lenders. It also
                    serves the lender list's purpose, investor_only and
                    purchase_desc parameters. False on a registry built before
                    the deed link: every such value is null, and those
                    parameters answer 422 lenders_unavailable.
                investor_lending_measured:
                  type: boolean
                  description: >-
                    True when the market has the deal link and the borrower
                    match. Then the API serves the deal block, outcome and
                    investor ids on the loan rows, and the investor_lending
                    block on the profiles. It also serves the financing block on
                    deal rows and the financing sidecar on investor profiles.
                    False otherwise: every one of those is null.
                flips_measured:
                  type: boolean
                  description: >-
                    True when the market measures the flips each lender
                    financed, the flips_financed block on the profiles. False
                    otherwise: the block is null.
                borrowers_measured:
                  type: boolean
                  description: >-
                    True when the market has the borrower fold. Then the API
                    serves borrower keys on the loan rows, the borrowers block
                    on the profiles, GET `/v1/lenders/{id}/borrowers` and the
                    financed_by and uses_private_lender filters. False
                    otherwise: the block is null, and the route and the filters
                    answer 422 lenders_unavailable.
                takebacks_measured:
                  type: boolean
                  description: >-
                    True when the registry of this market includes the
                    foreclosure take-backs. That needs the auction deed tables
                    built and the lender members present. Then the API serves
                    the takebacks block on the profiles, the foreclosed block on
                    the loan rows and the FORECLOSED outcome. False otherwise:
                    the block is null on every profile, and foreclosed is null
                    on every loan row.
                counties_measured:
                  type: boolean
                  description: >-
                    True when the market has more than one loaded county, so a
                    county ranking means something:
                    rankings.n_counties_ranked_first_24m on the profiles. False
                    while the slice covers one county: that count is null.
                dated:
                  description: >-
                    True when the registry is a snapshot valued at as_of, like
                    the financing slice behind it. The API stamps every value
                    from it in meta.dated[] as the lenders block. Null on a
                    registry row that does not record it, a row older than the
                    column.
                  type:
                    - boolean
                    - 'null'
                n_parcels_uncovered:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels of the market outside the counties the registry
                    covers. Such a county is one the financing slice does not
                    reach. Null when the row does not record it.
              required:
                - as_of
                - recordings_through
                - counties
                - history_capture_share
                - n_lender_ids
                - purchase_measured
                - investor_lending_measured
                - flips_measured
                - borrowers_measured
                - takebacks_measured
                - counties_measured
                - dated
                - n_parcels_uncovered
              additionalProperties: false
            - type: 'null'
          description: >-
            The lender registry of this market. Null when this market has no
            published lender tables: every /v1/lenders route then answers 422
            lenders_unavailable.
      required:
        - market
        - state
        - counties
        - bbox
        - data_end
        - build_run_id
        - registry_run
        - registry_version
        - dataset_version
        - loaded_at
        - metro_buy_to_resale_ratio
        - universe_kind
        - universe_zips
        - point_tolerance_miles
        - n_parcels
        - listings_data_end
        - agents_data_end
        - wholesale_as_of
        - str_as_of
        - str
        - auction_counted
        - parcel_as_of
        - address_as_of
        - parcel
        - lenders
      additionalProperties: false
      description: >-
        One market of the first build. No route of the served set carries one:
        meta.coverage is empty.
    Dated:
      type: object
      properties:
        block:
          type: string
          enum:
            - valuation
            - financing
            - liens
            - lenders
          description: >-
            The block of the response that is a snapshot at as_of, not current
            data. The values are valuation (the AVM, equity and LTV), financing
            (open liens and mortgage history), liens (involuntary liens) and
            lenders. The lenders block is the lender registry and every count on
            it, built from the same slice.
        as_of:
          type: string
          format: date
          description: >-
            The date of the delivery that valued the snapshot, YYYY-MM-DD: the
            same date as meta.coverage[].parcel.financing.as_of for the market.
        reason:
          type: string
          description: >-
            Why the block is dated, in one sentence: the dataset is not in the
            current delivery.
      required:
        - block
        - as_of
        - reason
      additionalProperties: false
      description: >-
        One block of the response that is a dated snapshot. Every response that
        carries a value from a dated block lists it here. A caller that cannot
        use dated data passes require_current: true. The API then answers 422
        dated_refused instead.
    BuildState:
      type: object
      properties:
        state:
          type: string
          pattern: ^[A-Z]{2}$
          description: The 2-letter state code of a served state, for example AZ.
        build_id:
          description: >-
            The id of the build of the files, a hash of the recorded steps. Null
            while the files of the state are a trial and no build id exists.
          type:
            - string
            - 'null'
        built_at:
          anyOf:
            - type: string
              format: date-time
              description: Timestamp, ISO 8601.
            - type: 'null'
          description: >-
            When the last step of the build finished, ISO 8601. Null while the
            files carry no record.
        published_at:
          type: string
          format: date-time
          description: When the publish of the state wrote the served tables, ISO 8601.
        run_id:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The id of the publish that serves the rows of the state. It moves
            with each publish.
        financing_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the financing slice of the state, the newest applied
            drop of the county records: the clock of every lender window,
            YYYY-MM-DD. Null while the state has no financing slice.
        recordings_through:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The newest recording date of a loan of the slice, YYYY-MM-DD. Null
            while the state has no financing slice.
        financing_source:
          description: >-
            Where the financing slice came from: replay_887 for the replay of
            the archive of the feed, weekly when the weekly delivery carries the
            domains again. Null while the state has no financing slice.
          type:
            - string
            - 'null'
        str_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The short-term rental snapshot of the state, YYYY-MM-DD: the oldest
            snapshot date over the places this API serves, so no served status
            is older than it. Each place carries its own date on GET
            /v3/coverage. Null while the state has no short-term rental tables.
      required:
        - state
        - build_id
        - built_at
        - published_at
        - run_id
        - financing_as_of
        - recordings_through
        - financing_source
        - str_as_of
      additionalProperties: false
      description: >-
        One served state: its build, its publish and the dates of its financing
        slice.
    CountyZip:
      type: object
      properties:
        zip:
          type: string
          description: The 5-digit ZIP.
        n_parcels:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The parcels of the ZIP in the place index.
      required:
        - zip
        - n_parcels
      additionalProperties: false
      description: >-
        One ZIP of a county with its parcel count: a ZIP the place routes
        answer.
    StrCoverageJurisdiction:
      type: object
      properties:
        name:
          type: string
          description: >-
            The jurisdiction, upper case, for example SCOTTSDALE, PHOENIX or
            HOUSTON: the city-limit polygon the parcel falls in, never the
            postal city. The same value as
            short_term_rental.coverage.jurisdiction on the parcels inside it.
        regime:
          anyOf:
            - type: string
              enum:
                - REQUIRED
                - NOT_REQUIRED
                - UNKNOWN
              description: >-
                The city's rule on a short-term rental licence or permit.
                REQUIRED: an ordinance requires one. NOT_REQUIRED: the city has
                no requirement, so no roll exists. UNKNOWN: the survey did not
                cover the city. Null when the market row does not record it.
            - type: 'null'
          description: >-
            Null when the market row does not record it. The city's rule on a
            short-term rental licence or permit. REQUIRED: an ordinance requires
            one. NOT_REQUIRED: the city has no requirement, so no roll exists.
            UNKNOWN: the survey did not cover the city. Null when the market row
            does not record it.
        coverage_reason:
          anyOf:
            - type: string
              enum:
                - LOADED_SERVED
                - LOADED_UNVALIDATED
                - LOADED_COUNTS_ONLY
                - REQUIRED_NOT_PUBLISHED
                - NO_REQUIREMENT
                - NOT_SURVEYED
              description: >-
                Why parcels of this jurisdiction carry, or do not carry, a
                short-term rental block. LOADED_SERVED: the city's roll is on
                file, matched to parcels and served, so every parcel inside
                carries a block, NONE when it has no record. LOADED_UNVALIDATED:
                the roll is on file and matched, but without a spot check, so
                the block is present with status null and coverage.served false.
                LOADED_COUNTS_ONLY: the roll is on file for counts only, because
                no parcel match is possible for the file, so no block. No block
                for REQUIRED_NOT_PUBLISHED (licence required, no roll
                published), NO_REQUIREMENT (no licence required) or NOT_SURVEYED
                (outside the survey). Null when the market row does not record
                it.
            - type: 'null'
          description: >-
            Null when the market row does not record it. Why parcels of this
            jurisdiction carry, or do not carry, a short-term rental block.
            LOADED_SERVED: the city's roll is on file, matched to parcels and
            served, so every parcel inside carries a block, NONE when it has no
            record. LOADED_UNVALIDATED: the roll is on file and matched, but
            without a spot check, so the block is present with status null and
            coverage.served false. LOADED_COUNTS_ONLY: the roll is on file for
            counts only, because no parcel match is possible for the file, so no
            block. No block for REQUIRED_NOT_PUBLISHED (licence required, no
            roll published), NO_REQUIREMENT (no licence required) or
            NOT_SURVEYED (outside the survey). Null when the market row does not
            record it.
        served:
          type: boolean
          description: >-
            True when parcels inside this jurisdiction carry a measured status
            (LICENSED, PENDING, EXPIRED or NONE). False when they carry a block
            with status null, or no block at all: coverage_reason says why.
        snapshot_only:
          type: boolean
          description: >-
            True when the roll came from a single pull and has no weekly feed
            (Fountain Hills, Cave Creek). Its dates are the pull date, and the
            API never sets feed_stale.
        licence_start:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The earliest possible date of a licence in this jurisdiction, the
            day its ordinance took effect, YYYY-MM-DD, for example 2025-10-01
            for Houston. Null when unknown, or when the city requires no
            licence.
        snapshot_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The snapshot the served blocks read, YYYY-MM-DD:
            short_term_rental.data_as_of on every parcel inside. Null when no
            roll is on file.
        feed_stale:
          type: boolean
          description: >-
            True when this week's feed failed the freshness rule and the API
            serves the last good snapshot instead. Every block inside then
            carries coverage.feed_stale true. False otherwise.
        sources:
          type: array
          items:
            $ref: '#/components/schemas/StrCoverageSource'
          description: >-
            The city files behind this jurisdiction, each with its newest load
            date and its stale flag. Empty when no roll is on file.
        n_licensed:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels inside with status LICENSED on this snapshot. Null when no
            roll is on file.
        n_pending:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels inside with status PENDING. Null when no roll is on file.
        n_expired:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels inside with status EXPIRED. Null when no roll is on file.
        n_advertised:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels the city lists as advertised without a licence, Scottsdale
            only. The API counts them and never serves them as a status. Null
            when the city publishes no such list.
        share_unmatched:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of the city's records that matched no parcel, 0 to 1, for
            example 0.04. Null when no roll is on file.
        share_assumed:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of attributed parcels with attribution_basis ASSUMED, 0 to
            1. ASSUMED means the attribution has no date, no name and no regime
            bound. Null when no roll is on file.
      required:
        - name
        - regime
        - coverage_reason
        - served
        - snapshot_only
        - licence_start
        - snapshot_date
        - feed_stale
        - sources
        - n_licensed
        - n_pending
        - n_expired
        - n_advertised
        - share_unmatched
        - share_assumed
      additionalProperties: false
      description: >-
        One city of the market in the short-term rental build. It says if the
        licence roll is on file and served, how fresh it is, and what it counts.
        It explains a null short_term_rental block on a parcel: the block is
        null where the API does not serve the jurisdiction.
    ParcelCoverage:
      type: object
      properties:
        parcel_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end that the parcel layer build used, YYYY-MM-DD. Null
            when the coverage row does not record it.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels in the layer for this market. Null when the coverage row
            does not record it.
        sale_mortgage_measured:
          type: boolean
          description: >-
            True when the delivery records a purchase mortgage on at least one
            priced last sale in five of the market. Then cash_sale_proxy, the
            sale.cash_sale filter and the cash-buyer quicklist are measured.
            False below that bar, as in the 2026 deliveries, which carry the
            column empty. Then cash_sale_proxy is null on every parcel, and the
            filter and the quicklist answer 422 cash_sale_unavailable.
        financing:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the delivery that valued the financing, lien and
                    valuation slice, YYYY-MM-DD. Null when the coverage row does
                    not record it.
                dated:
                  type: boolean
                  description: >-
                    True while the Recorder & Mortgage and AVM datasets are not
                    in the current delivery, so the slice stays at as_of. The
                    API then stamps every value from the slice in meta.dated[].
                dated_reason:
                  description: Why the slice is dated. Null when dated is false.
                  type:
                    - string
                    - 'null'
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with a row in the slice. Null when the coverage row
                    does not record it.
                n_with_open_lien:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with at least one open lien at as_of. Null when the
                    coverage row does not record it.
                n_free_and_clear:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with zero open liens at as_of. Null when the
                    coverage row does not record it.
                n_avm:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with an AVM at as_of. Null when the coverage row
                    does not record it.
                n_involuntary:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with an involuntary lien at as_of. Null when the
                    coverage row does not record it.
                n_lenders:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Distinct raw lender spellings over the two lien tables, not
                    registry ids. For registry ids, read
                    meta.coverage[].lenders.n_lender_ids. Null when the coverage
                    row does not record it.
              required:
                - as_of
                - dated
                - dated_reason
                - n_parcels
                - n_with_open_lien
                - n_free_and_clear
                - n_avm
                - n_involuntary
                - n_lenders
              additionalProperties: false
            - type: 'null'
          description: The financing slice. Null when this market has none.
        permits:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The effective date of the loaded permit snapshot,
                    YYYY-MM-DD. Null when the coverage row does not record it.
                n_permits:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Permits served for this market. Null when the coverage row
                    does not record it.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with at least one permit. Null when the coverage row
                    does not record it.
                n_unmatched:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Permits in the county file that landed on no parcel of the
                    market, so the API does not serve them. Null when the
                    coverage row does not record it.
                jurisdictions:
                  anyOf:
                    - type: array
                      items:
                        type: object
                        properties:
                          jurisdiction:
                            description: >-
                              The issuing city or county, upper case. Null when
                              the file names none.
                            type:
                              - string
                              - 'null'
                          n_permits:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                            description: >-
                              Permits the jurisdiction issued, all time. Null
                              when the coverage row does not record it.
                          last_issue_date:
                            anyOf:
                              - type: string
                                format: date
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                            description: >-
                              The newest issue date of the jurisdiction,
                              YYYY-MM-DD. Null when no permit of the
                              jurisdiction carries an issue date.
                          windows_measured:
                            description: >-
                              True when the jurisdiction issued a permit in the
                              12 months before as_of. False when it did not: its
                              feed is stale, so its parcels carry null 24-month
                              and 36-month windows. The rule applies in every
                              market. Read those null windows (n_permits_24m,
                              n_open_permits_12m, major_work_36m, tags_24m,
                              job_value_24m) as unmeasured, not as permit-free.
                              The negative permit filters of the search leave
                              such parcels out. Null only on a coverage row
                              built before the flag existed.
                            type:
                              - boolean
                              - 'null'
                        required:
                          - jurisdiction
                          - n_permits
                          - last_issue_date
                          - windows_measured
                        additionalProperties: false
                    - type: 'null'
                  description: >-
                    The issuing jurisdictions, largest first, each with its
                    permit count, its newest issue date and its windows_measured
                    flag. Null when the coverage row does not record them.
              required:
                - as_of
                - n_permits
                - n_parcels
                - n_unmatched
                - jurisdictions
              additionalProperties: false
            - type: 'null'
          description: The permit snapshot. Null when this market has none.
        owner_profile:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the delivery the Owner Profile block comes from,
                    YYYY-MM-DD. Null when the coverage row does not record it.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels carrying a profile. Null when the coverage row does
                    not record it.
                n_multi:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels whose owner holds two or more properties. Null when
                    the coverage row does not record it.
                n_portfolio_5:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels whose owner holds five or more. Null when the
                    coverage row does not record it.
              required:
                - as_of
                - n_parcels
                - n_multi
                - n_portfolio_5
              additionalProperties: false
            - type: 'null'
          description: The Owner Profile block. Null when this market has none.
        history:
          anyOf:
            - type: object
              properties:
                first_week:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The first weekly file the history lake replayed (the
                    baseline FULL), YYYY-MM-DD. Null when the lake has no file.
                last_week:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The last weekly file replayed, YYYY-MM-DD. Null when the
                    lake has no file.
                zips:
                  anyOf:
                    - type: array
                      items:
                        type: string
                    - type: 'null'
                  description: >-
                    The ZIP codes the history lake covers. A parcel outside them
                    has no history: `GET /v1/properties/{id}/history` answers
                    422 history_unavailable and the history block is null.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels observed in the ZIP set. Null when the coverage row
                    does not record it.
                n_events:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Typed events on record. Null when the coverage row does not
                    record it.
                n_weeks:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Weekly files replayed. Null when the coverage row does not
                    record it.
                domains:
                  anyOf:
                    - type: object
                      propertyNames:
                        type: string
                      additionalProperties:
                        type: object
                        properties:
                          first_week:
                            anyOf:
                              - type: string
                                format: date
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                            description: >-
                              The first weekly file with the domain, YYYY-MM-DD.
                              Null when the lake has no file for it.
                          last_week:
                            anyOf:
                              - type: string
                                format: date
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                            description: >-
                              The last weekly file with the domain, YYYY-MM-DD.
                              Null when the lake has no file for it.
                          n_events:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                            description: >-
                              Typed events of the domain on record. Null when
                              the coverage row does not record it.
                        required:
                          - first_week
                          - last_week
                          - n_events
                        additionalProperties: false
                    - type: 'null'
                  description: >-
                    Per domain, the weeks the lake covers it. Valuation and
                    financing end at the financing slice date, financing.as_of.
                    The rest run to last_week. Null when the coverage row does
                    not record them.
              required:
                - first_week
                - last_week
                - zips
                - n_parcels
                - n_events
                - n_weeks
                - domains
              additionalProperties: false
            - type: 'null'
          description: The history lake. Null when this market has none.
      required:
        - parcel_as_of
        - n_parcels
        - sale_mortgage_measured
        - financing
        - permits
        - owner_profile
        - history
      additionalProperties: false
      description: >-
        What the parcel products cover in one market. The parts are the parcel
        layer, the dated financing slice, the permit snapshot, the Owner Profile
        block and the history lake. Each part carries its as-of date and its
        counts, and is null where the market has none of it. The block itself is
        null where the market has no parcel product tables.
    StrCoverageSource:
      type: object
      properties:
        source:
          type: string
          description: >-
            The source code of one city file, for example S1 (the Scottsdale
            licensed roll), P1 (the Phoenix active permits layer) or COH (the
            Houston registry).
        snapshot_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the newest load of this source, YYYY-MM-DD. Null before
            the first load of this source.
        stale:
          type: boolean
          description: >-
            True when the newest load failed the freshness rule and the API
            still serves the previous snapshot. A load fails the rule when the
            count moved more than 30 percent, or when its newest date is more
            than 14 days old.
      required:
        - source
        - snapshot_date
        - stale
      additionalProperties: false
      description: >-
        One city file behind a jurisdiction's short-term rental data: the date
        of its newest load, and if that load is stale.
  headers:
    ETag:
      description: >-
        The entity tag of the answer, derived from the build of the served set
        and from the representation, not from the body. It moves only when a
        state is published again. On a JSON route, send it back as
        If-None-Match, and an unchanged set answers 304 with no body. GET
        /v3/build runs no query, so it is the lowest-cost place to send the tag.
        On every 2xx and the 304, never on an error.
      schema:
        type: string
    X-Request-Id:
      description: >-
        The id of this call. The edge mints it and also sends it as zp-rid, the
        gateway's own name for it. The API keys its log line for the call on it,
        and every error body repeats it as request_id. Log it on every response,
        not only on errors. A refusal the gateway answers itself carries zp-rid
        and request_id alone. Those refusals are a 401, a 403 quota_exceeded and
        a 429 at the limit of the plan.
      schema:
        type: string
    X-Rows:
      description: >-
        How many rows the body carries: data.length on a list, 1 on a single
        record. The size of the body, not a charge. Absent on a streamed export,
        whose count the API knows only when the stream ends, and on a 304.
      schema:
        type: integer
        minimum: 0
    X-Dataset-Version:
      description: >-
        The build token of the served set: one pair per served state in state
        order, each the state and its run id, joined by a dash
        (AZ1790123752-TX1790248213 for two states). The run ids are the same as
        meta.build.states[].run_id, and you can read them without parsing the
        body. The token moves only when a state is published again, so fold it
        into cache keys. On every 2xx and the 304, never on an error.
      schema:
        type: string
    X-Data-End:
      description: >-
        The newest deed date across the served states, YYYY-MM-DD. GET
        /v3/coverage carries the date of each state. On every 2xx and the 304,
        never on an error. Absent while no served state carries a deed date.
      schema:
        type: string
    Retry-After:
      description: >-
        Whole seconds to wait before you retry, never below 1. On a 429, the
        seconds until the spent bucket refills. On a 503, 1 for pool_saturated
        and 5 for ledger_unavailable, and none for database_unavailable. On a
        403 plan_limit for the name-search day cap, the seconds to the next UTC
        midnight, when the cap resets. The other plan limits carry none. The
        body repeats it as retry_after on the 429, the ledger refusal and the
        day cap.
      schema:
        type: integer
        minimum: 1
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        API key from the developer console (starts with zpka_). Create one at
        https://developers.investorlift.com/get-a-key. The same key works on
        POST /mcp.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.