---
title: "Check a listing, assessment notice, or inspection excerpt against official records (one property)"
method: POST
path: "/api/locus-listing-claim-check"
tags: ["data", "search", "real-estate", "property", "property-research", "due-diligence", "public-records", "x402", "claim-check", "assessment-notice", "inspection-excerpt", "permits", "buyer", "owner", "x402", "category:parcels"]
---

# Check a listing, assessment notice, or inspection excerpt against official records (one property)

`POST /api/locus-listing-claim-check`

## Request

- Base URL: `https://api.locus.report`
- URL: `https://api.locus.report/api/locus-listing-claim-check`
- Auth: API key in header `PAYMENT-SIGNATURE`

Hold what a document says about one US address next to dated official records. Modes: listing (advertised area, year built, additions, permits vs parcel and permit records), assessment_notice (figures and the notice's own printed date vs the roll and the cited statutory appeal rule), inspection_excerpt (observations mapped to the records that publish that work, plus questions for a pro). Charge-free without cited evidence. npx @velinussage/locus-agent-skill add.

## Request body

- object
  - `subjects` object[], required
    - `id` string, required
    - `address` string, required
    - `mode` 'listing' | 'assessment_notice' | 'inspection_excerpt', required
    - `claims` union[]: Listing mode only. Structured claims you already hold.
      - union
        - object
          - `field` 'reported_area', required
          - `value` number, required
          - `unit` 'sqft' | 'sqm', required
          - `definition` 'heated' | 'above_grade' | 'basement' | 'gross' | 'unspecified', required: Required. An area with no declared definition is never held against an assessor area.
        - object
          - `field` 'year_built', required
          - `year` integer, required
        - object
          - `field` 'bedrooms', required
          - `count` number, required
        - object
          - `field` 'bathrooms', required
          - `count` number, required
        - object
          - `field` 'roof_work_date' | 'addition_work_date', required
          - `date` string, required
        - object
          - `field` 'permit_reference', required
          - `permitId` string, required
          - `reportedStatus` string
    - `listingText` string: Listing mode only. Private input; never stored or rendered.
    - `noticeText` string: assessment_notice mode only. Private input; never stored or rendered.
    - `inspectionText` string: inspection_excerpt mode only. Private input; never stored or rendered.

## Response `200`

Successful paid artifact, or a free pre-charge diagnostic when the request is outside current coverage.

- union
  - object
    - `kind` 'listing_claim_check', required
    - `generatedAt` string, required
    - `subjects` object[], required
      - `subjectId` string, required
      - `mode` 'listing' | 'assessment_notice' | 'inspection_excerpt', required
      - `address` string, required
      - `addressSource` 'official_record' | 'normalized_input' | 'unresolved', required
      - `identity` 'resolved' | 'ambiguous' | 'unresolved', required
      - `coverage` 'covered' | 'out_of_coverage' | 'unknown', required
      - `parcelSourceStatus` 'available' | 'unavailable' | 'not_applicable', required
      - `permitSourceStatus` 'available' | 'unavailable' | 'not_covered' | 'not_requested', required
      - `parcelId` string
      - `claimsRead` integer, required
      - `findings` object[], required
        - `claimId` string, required
        - `subjectId` string, required
        - `field` string, required
        - `outcome` string, required
        - `reason` string, required
        - `reportedValue` string, required
        - `officialValue` string
        - `difference` object
          - `absolute` number, required
          - `percentOfOfficial` number, required
          - `unit` string, required
        - `citations` object[], required
          - `sourceName` string, required
          - `sourceUrl` string, required
          - `fetchedAt` string, required
          - `recordId` string
        - `caveats` string[], required
      - `ambiguities` object[], required
        - `field` string
        - `reason` string, required
        - `detail` string, required
      - `unsupported` object[], required
        - `detail` string, required
        - `reason` string, required
      - `noticeDate` object
        - `date` string, required
        - `precision` 'month' | 'day', required
        - `label` string, required
      - `computed` object[], required
        - `label` string, required
        - `date` string, required
        - `derivedFrom` 'notice_date' | 'statutory_calendar', required
        - `year` integer, required
        - `yearSource` 'notice_tax_year' | 'current_calendar_year', required
        - `rule` string, required
        - `statute` string, required
        - `sourceUrl` string, required
      - `evidenceBearingFindings` integer, required
      - `chargeable` boolean, required
      - `instructionLikeContent` boolean, required
      - `caveats` string[], required
    - `limitations` string[], required
    - `reportId` string, required
    - `reportExpiresAt` string, required
    - `charged` true, required
    - `shareAccessProof` string
    - `artifacts` object, required
      - `json` object, required
        - `url` string, required
        - `sha256` string, required
        - `cid` string
      - `html` object, required
        - `url` string, required
        - `sha256` string, required
        - `cid` string
  - object
    - `kind` 'listing_claim_check_diagnostic', required
    - `charged` false, required
    - `status` 'disabled' | 'invalid_input' | 'no_usable_evidence' | 'persistence_unavailable' | 'share_unavailable', required
    - `message` string, required
    - `subjectStatus` object[]
      - `subjectId` string, required
      - `identity` string, required
      - `coverage` string, required
      - `parcelSourceStatus` string, required
      - `permitSourceStatus` string, required
      - `evidenceBearingFindings` integer, required
      - `reason` 'not_covered' | 'identity_ambiguous' | 'source_unavailable' | 'field_not_published' | 'checked_no_match' | 'no_comparable_official_field' | 'no_usable_comparison' | 'comparison_available', required
      - `detail` string, required

## Other responses

- `400`: Invalid request body.
- `402`: Payment Required. For x402 v2, repeat the identical request with a valid PAYMENT-SIGNATURE header (legacy X-PAYMENT is accepted for compatibility). MPP is disabled for this lifecycle-bound tool.

---

[API](https://skmtc.dev/locus/apis/locus-api.md) · [All operations](https://skmtc.dev/locus/apis/locus-api/llms.txt) · [OpenAPI document](https://skmtc.dev/locus/apis/locus-api/revisions/ba7786b74adb?raw)
