---
title: "Before-you-sign due-diligence bundle (one address)"
method: POST
path: "/api/locus-before-you-sign"
tags: ["data", "search", "real-estate", "property", "property-research", "due-diligence", "public-records", "x402", "property-records", "property-due-diligence", "buyer-agent", "address", "parcel-research", "local-change-analysis", "real-estate-bills", "ordinance-analysis", "category:reports"]
---

# Before-you-sign due-diligence bundle (one address)

`POST /api/locus-before-you-sign`

## Request

- Base URL: `https://api.locus.report`
- URL: `https://api.locus.report/api/locus-before-you-sign`
- Auth: one of:
  - API key in header `PAYMENT-SIGNATURE`
  - API key in header `Authorization`

Parcel, local-change, and bill or ordinance records for one street address after free lane preflight. After settlement or seller-escrow, parcelFacts may show the cited assessor owner-of-record for the same exact parcel, not a contact. Optional context frames output, never changes access. npx @velinussage/locus-agent-skill add.

## Request body

- object: Flexible US street address of the property. Optional context and followUp fields frame the cited output but never change data access. Include city/state or ZIP when possible. Coverage is checked before any charge.
  - `address` string, required: Flexible US street address for the property under consideration, e.g. '200 Fayetteville St, Raleigh, NC 27601'. Include city/state or ZIP when possible; this bundle is address-first, not county-only.
  - `lookbackMonths` integer
  - `includeCrime` boolean, required
  - `context` string: Optional caller context used only to prioritize and frame the cited output; it never changes data access.
  - `followUp` string: Optional follow-up question answered only from the bundle's fetched evidence.

## Response `200`

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

- union: A `kind`-discriminated union: `before_you_sign_bundle` (parcel facts + trend brief + policy brief, with per-component status) or `coverage_diagnostic` for a free pre-charge diagnostic.
  - object
    - `kind` 'before_you_sign_bundle', required
    - `id` string, required
    - `generatedAt` string, required
    - `place` object, required
      - `input` string, required
      - `resolved` string
      - `jurisdictionId` string, required
      - `coverageStatus` 'supported' | 'supported_partial' | 'discovery_only' | 'unsupported', required
    - `intent` string, required
    - `componentStatus` object[], required
      - `component` 'parcel_facts' | 'trend_brief' | 'policy_brief', required
      - `status` 'ok' | 'unavailable' | 'out_of_coverage', required
    - `componentReadinessDetail` object[]
      - `component` 'trend' | 'parcel' | 'policy', required
      - `ready` boolean, required
      - `state` string, required
      - `reason` string, required
    - `parcelFacts` object
      - `ownerOfRecord` string
      - `ownerOfRecordCitation` object
        - `sourceUrl` string, required
        - `fetchedAt` string, required
        - `sourceName` string
        - `recordId` string
      - `parcel` object
        - `ownerOfRecord` string
        - `ownerOfRecordCitation` object
          - `sourceUrl` string, required
          - `fetchedAt` string, required
          - `sourceName` string
          - `recordId` string
    - `trendBrief` object, required
      - `kind` 'local_trend_brief', required
      - `id` string, required
      - `generatedAt` string, required
      - `place` object, required
        - `input` string, required
        - `resolved` string
        - `jurisdictionId` string, required
        - `coverageStatus` 'supported' | 'supported_partial' | 'discovery_only' | 'unsupported', required
      - `intent` string, required
      - `intentRulesetVersion` string, required
      - `lookbackMonths` number, required
      - `coverage` object[], required
        - `source` 'permits' | 'code_violations' | 'service_requests_311' | 'crimes', required
        - `datasetId` string, required
        - `status` 'ok' | 'empty' | 'unavailable', required
        - `recordCount` number, required
        - `lookbackCovered` boolean, required
        - `sourceUrl` string, required
      - `series` object[], required
        - `key` string, required
        - `source` 'permits' | 'code_violations' | 'service_requests_311' | 'crimes', required
        - `bucket` 'monthly' | 'quarterly', required
        - `points` object[], required
          - `periodStart` string, required
          - `count` number, required
        - `change` object, required
          - `direction` 'up' | 'down' | 'flat', required
          - `absoluteDelta` number, required
          - `pctChange` number, nullable, required
          - `method` 'first-half-vs-second-half' | 'year-over-year', required
        - `confidence` 'low' | 'medium' | 'high', required
        - `categoryBreakdown` object
          - `top` object[], required
            - `label` string, required
            - `count` number, required
            - `recentCount` number, required
            - `baselineCount` number, required
            - `delta` number, required
          - `totalCategorized` number, required
          - `uncategorized` number, required
      - `whatThisMayMean` string[], required
      - `whatThisDoesNotProve` string[], required
      - `questionsToAsk` string[], required
      - `citations` object[], required
        - `label` string, required
        - `sourceName` string, required
        - `sourceUrl` string, required
        - `datasetId` string, required
      - `caveats` string[], required
      - `citedCards` object[], required
        - `cardId` string, required
        - `jurisdictionId` string, required
        - `category` string, required
        - `sourceUrl` string, required
        - `biasProfile` object
          - `measures` string, required
          - `doesNotMeasure` string, required
          - `knownBiases` string[], required
          - `lagDays` integer
      - `chargeable` boolean, required
      - `storage` object[]
        - `provider` string, required
        - `locator` string, required
        - `contentHash` string, required
        - `pinned` boolean
      - `refinement` object
        - `context` object
          - `input` string, required
          - `emphasizedSources` string[], required
          - `rationale` string[], required
        - `followUp` object
          - `question` string, required
          - `status` 'answered' | 'gated' | 'unsupported', required
          - `answer` string[], required
          - `gatedReason` string
          - `gatedReasonCode` string
          - `citations` object[], required
            - `label` string, required
            - `sourceName` string, required
            - `sourceUrl` string, required
            - `datasetId` string, required
          - `caveats` string[], required
      - `communitySignal` object[]
        - `label` 'contested', required
        - `observationId` string, required
        - `jurisdictionId` string, required
        - `claimType` string, required
        - `body` string, required
        - `status` string, required
        - `placeLabel` string, required
        - `evidenceUrl` string, uri
      - `verifyNext` object[]
        - `step` string, required
        - `url` string
        - `source` string
    - `policyBrief` object
      - `kind` 'local_policy_brief', required
      - `id` string, required
      - `generatedAt` string, required
      - `place` object, required
        - `input` string, required
        - `resolved` string
        - `jurisdictionIds` string[], required
        - `displayName` string
      - `intent` string, required
      - `policyRulesetVersion` string, required
      - `artifacts` object[], required
        - `artifactId` string, required
        - `jurisdictionId` string, required
        - `jurisdictionName` string, required
        - `level` 'state' | 'county' | 'city', required
        - `artifactType` 'bill' | 'session_law' | 'statute' | 'ordinance' | 'resolution' | 'agenda_item' | 'code_section', required
        - `officialId` string, required
        - `title` string, required
        - `summary` string
        - `status` 'introduced' | 'in_committee' | 'adopted' | 'enacted' | 'codified' | 'repealed' | 'failed' | 'not_published' | 'unknown', required
        - `introducedAt` string
        - `actionDate` string
        - `effectiveDate` string
        - `textVersions` unknown[], required
          - unknown
        - `actions` unknown[], required
          - unknown
        - `votes` unknown[], required
          - unknown
        - `affectedDomains` string[], required
        - `affectedGeographies` string[], required
        - `rateChanges` object[]
          - `kind` 'property_tax' | 'fee' | 'levy' | 'bond', required
          - `label` string, required
          - `unit` 'cents_per_100' | 'usd' | 'percent', required
          - `fromValue` number
          - `toValue` number, required
          - `deltaValue` number
          - `extractedFrom` 'title' | 'summary' | 'text', required
          - `sourceExcerpt` string, required
        - `excerpts` string[]
        - `citations` object[], required
          - `sourceName` string, required
          - `sourceUrl` string, uri, required
          - `fetchedAt` string, required
          - `recordId` string, required
          - `locator` string
        - `caveats` string[], required
      - `signals` object[], required
        - `signalId` string, required
        - `artifactId` string, required
        - `localityMatch` 'direct' | 'jurisdictional' | 'statewide' | 'weak', required
        - `relevance` string[], required
        - `boundedClaim` string, required
        - `whyRelevant` string, required
        - `whatItDoesNotProve` string, required
        - `confidence` 'low' | 'medium' | 'high', required
        - `rateChange` object
          - `kind` 'property_tax' | 'fee' | 'levy' | 'bond', required
          - `label` string, required
          - `unit` 'cents_per_100' | 'usd' | 'percent', required
          - `fromValue` number
          - `toValue` number, required
          - `deltaValue` number
          - `extractedFrom` 'title' | 'summary' | 'text', required
          - `sourceExcerpt` string, required
        - `operativeProvision` string
        - `citations` object[], required
          - `sourceName` string, required
          - `sourceUrl` string, uri, required
          - `fetchedAt` string, required
          - `recordId` string, required
          - `locator` string
      - `citations` object[], required
        - `sourceName` string, required
        - `sourceUrl` string, uri, required
        - `fetchedAt` string, required
        - `recordId` string, required
        - `locator` string
      - `caveats` string[], required
      - `refinement` object
        - `context` object
          - `input` string, required
          - `emphasizedDomains` string[], required
          - `rationale` string[], required
        - `followUp` object
          - `question` string, required
          - `status` 'answered' | 'gated' | 'unsupported', required
          - `answer` string[], required
          - `gatedReason` string
          - `gatedReasonCode` string
          - `citations` object[], required
            - `sourceName` string, required
            - `sourceUrl` string, uri, required
            - `fetchedAt` string, required
            - `recordId` string, required
            - `locator` string
          - `caveats` string[], required
    - `verifyNext` object[], required
      - `step` string, required
      - `url` string
      - `source` string
    - `caveats` string[], required
  - object
    - `kind` 'coverage_diagnostic', required
    - `place` object, required
      - `input` string, required
      - `resolved` string
      - `jurisdictionId` string
      - `coverageStatus` 'discovery_only' | 'unsupported' | 'insufficient_data' | 'source_unavailable', required
    - `intent` string, required
    - `charged` false, required
    - `message` string, required
    - `candidateSources` object[], required
      - `category` string, required
      - `sourceName` string, required
      - `sourceUrl` string, required
    - `whatWeWouldNeed` string[], required
    - `sourceCounts` object[]
      - `source` string, required
      - `recordCount` number, required
    - `preflight` object
      - `tool` string, required
      - `url` string, required
      - `note` string, required
    - `requestCoverage` object
      - `tool` string, required
      - `endpoint` string, required
      - `note` string, required
    - `componentReadiness` object
      - `trend` 'ok' | 'partial' | 'thin' | 'missing' | 'unavailable', required
      - `parcel` 'ok' | 'varies' | 'missing' | 'unavailable', required
      - `policy` 'ok' | 'missing' | 'unavailable', required
    - `componentReadinessDetail` object[]
      - `component` 'trend' | 'parcel' | 'policy', required
      - `ready` boolean, required
      - `state` string, required
      - `reason` string, required
    - `insufficientComponents` string[]
    - `suggestedAlternative` string
    - `caveats` 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), or use Authorization: Payment for MPP Tempo when advertised in x-payment-info.offers.

---

[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)
