---
title: "Exact-subject permit closeout evidence check"
method: POST
path: "/api/locus-permit-closeout-check"
tags: ["permits", "closeout", "occupancy", "parcel", "due-diligence", "public-records", "x402", "category:parcels"]
---

# Exact-subject permit closeout evidence check

`POST /api/locus-permit-closeout-check`

## Request

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

Parcel permit closeout status from the jurisdiction's system of record. Coverage: Raleigh, Durham, Wake County, Austin, Seattle, Chicago, Los Angeles, New York City. For agents checking open work before closing; uncertain or unavailable evidence is charge-free. npx @velinussage/locus-agent-skill add.

## Request body

- object
  - `delivery` object: Optional REST x402 purchase-completion webhook. Requires an approved HTTPS origin. MCP/A2A and MPP do not support this pilot option. Keep both secrets private; statusToken authenticates delivery polling.
    - `url` string, uri, required
    - `verificationSecret` string, required
    - `statusToken` string, required
  - `address` string: Full street address. Provide this or jurisdiction-scoped parcelIds.
  - `parcelIds` string[]: One to 25 exact parcel identifiers for one project. Provide state and county.
  - `state` string: Two-letter state code required with parcelId or parcelIds.
  - `county` string: County name required with parcelId or parcelIds.
  - `municipality` string: Optional caller hint. The resolved parcel jurisdiction remains authoritative.
  - `permitId` string: Optional exact permit identifier to select before reducing the official response.
  - `priorSnapshotId` string: Optional prior Locus permit snapshot identifier for deterministic field comparison.

## Response `200`

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

- object
  - `handoffs` object[]
  - `watchTriggers` object[]
    - `event` string, required
    - `date` string, date, required
    - `basis` 'as filed' | 'statutory' | 'published schedule', required
    - `source` string, uri, required
  - `delivery` object
    - `eventId` string, required
    - `statusUrl` string, required
    - `statusAuthHeader` 'x-locus-delivery-token', required
    - `retryMode` 'manual', required
    - `retryMethod` 'POST', required
    - `retryUrl` string, required
    - `cancelMethod` 'DELETE', required
  - `kind` 'permit_closeout_check', required
  - `charged` false
  - `subject` object, required
    - `address` string, required
    - `parcelId` string
    - `parcelIds` string[]
    - `matchedAddress` string
    - `state` 'parcel_resolved' | 'unresolved', required
  - `coverage` object, required
  - `laneState` 'follow_up_records_found' | 'published_closeout_records_found' | 'checked_no_open_closeout_records' | 'no_matching_record' | 'parcel_match_uncertain' | 'status_not_published' | 'out_of_coverage' | 'source_unavailable', required
  - `matchBasis` 'parcel_id' | 'normalized_address' | 'nearby_only' | 'none', required
  - `records` object[], required
    - `permitId` string, required
    - `rawStatus` string
    - `recordState` 'open_or_pending' | 'expired_or_lapsed' | 'no_final_published' | 'closed_or_final_published' | 'status_unclassified', required
    - `permitType` string
    - `recordType` 'permit' | 'plan' | 'inspection'
    - `applicationDate` string
    - `issueDate` string
    - `statusDate` string
    - `expiryDate` string
    - `completionPublished` string
    - `coPublishedDates` string[], required
    - `coNumber` string
    - `recordNote` string
    - `finalDate` string
    - `inspectionRequestDate` string
    - `inspectionScheduleDate` string
    - `matchedParcelIds` string[]
    - `inspectionEvidenceState` 'source_published_final_or_passed' | 'source_published_open_or_failed' | 'inspection_status_not_published' | 'no_matching_inspection_record' | 'professional_document_required', required
    - `source` object, required
      - `sourceName` string, required
      - `sourceUrl` string, uri, required
      - `recordId` string, required
      - `fetchedAt` string, required
  - `followUpItems` object[], required
    - `factualBasis` string, required
    - `recordIds` string[], required
    - `verifyNext` object, required
      - `action` string, required
      - `url` string, uri, required
  - `unansweredQuestions` string[], required
  - `caveats` string[], required
  - `boundary` string, required
  - `sourceCheck` object
    - `sourceName` string, required
    - `sourceUrl` string, uri, required
    - `verifiedAt` '2026-09-02' | '2026-09-03', required
    - `queryUrl` string, uri, required
    - `queryUrls` string[], required
    - `fetchedAt` string, required
    - `status` 'ok' | 'source_unavailable' | 'parcel_match_uncertain', required
    - `error` string
  - `snapshotId` string, required
  - `observedAt` string, required
  - `accessMethod` 'official_api' | 'official_download' | 'approved_public_browser', required
  - `changes` object[], required
    - `field` string, required
    - `prior` unknown, required
    - `current` unknown, required
    - `changedAt` string
  - `evidenceState` 'confirmed' | 'ambiguous_match' | 'not_found' | 'not_covered' | 'source_unavailable' | 'manual_check_required', required
  - `priorSnapshotId` string
  - `snapshotPersistence` 'persisted' | 'not_requested' | 'disabled' | 'unavailable' | 'not_applicable', required
  - `recheckTargets` object[]
    - `endpoint` '/api/locus-permit-closeout-check', required
    - `method` 'POST', required
    - `arguments` object, required
      - `state` string, required
      - `county` string, required
      - `parcelIds` string[], required
      - `permitId` string, required
      - `priorSnapshotId` string, required
    - `sourceNamespace` string, required
    - `recordType` 'permit' | 'plan' | 'inspection', required
    - `matchBasis` 'parcel_id', required
    - `checkedFields` string[], required
    - `observedAt` string, required
    - `baselineVersion` string, required
    - `boundary` string, required
  - `recheckTargetsTruncated` boolean
  - `recheckTargetLimit` integer
  - `recheckTargetsUnavailableReason` string
  - `recheck` object
    - `state` 'changed' | 'unchanged' | 'unavailable', required
    - `baselineSnapshotId` string, required
    - `reason` string
    - `deltas` object[], required
      - `field` string, required
      - `previousValue` unknown, required
      - `newValue` unknown, required
      - `sourceNamespace` string, required
      - `recordId` string, required
      - `sourceUrl` string, uri, required
      - `eventDate` string, nullable, required
      - `firstObservedAt` string, required
      - `priorObservedAt` string, required
    - `boundary` 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)
