Docs
API Reference

Deficiency Reports API

Query organization-scoped deficiency findings generated by validation workflows.

Reading existing reports

Reading an authorized saved report does not consume a trial or prepaid review credit and remains available after processing expiry. Saving a new usable packet report consumes one credit even when cached evidence avoids a provider call. Current organization access is still required. See trial and prepaid processing.

Deficiency Reports API

List Deficiency Reports

GET /api/v1/deficiency-reports

Query Params

  • utility (optional)
  • severity (optional): critical, high, medium, low
  • status (optional alias): location statuses (exact, approximate, unresolved, pending), finding states (open, resolved, superseded) or remediation progress (open, in_progress, pending_revalidation, resolved, wont_fix)
  • locationStatus (optional): exact, approximate, unresolved, pending
  • findingState (optional): open, resolved, superseded. This is whether the deficiency is still open. Only a review closes a finding.
  • remediationStatus (optional): open, in_progress, pending_revalidation, resolved, wont_fix. This is the applicant's progress on a fix. resolved here means a fix was applied, not that the finding closed.
  • applicationId (optional uuid)
  • documentId (optional uuid)
  • limit (1-100, default 50)
  • offset (default 0)

Response Shape

{
  "reports": [
    {
      "id": "uuid",
      "sessionId": "uuid",
      "utility": "duke-energy",
      "state": "NC",
      "applicationId": "c8a43756-2e9f-4d10-a7c3-216bdd403e15",
      "documentId": "uuid",
      "deficiencyType": "site_control",
      "description": "Lease term does not meet minimum duration",
      "severity": "high",
      "requirementSource": "Duke Energy NC Tariff Section 3.2",
      "requirementId": "uuid",
      "pageReference": 4,
      "boundingBox": { "x": 120, "y": 210, "width": 180, "height": 50 },
      "locationStatus": "exact",
      "locationMethod": "vision_verified",
      "locationConfidence": "high",
      "locationReason": null,
      "locationMatchedText": "Lease shall remain in effect for twenty years",
      "workingSpanId": "4f2e2b15-8b6d-4a31-8fdb-2a38f5e0b222",
      "workingPageHint": 4,
      "workingQuote": "Lease shall remain in effect for twenty years",
      "workingCharStart": 1421,
      "workingCharEnd": 1472,
      "workingAnchor": {
        "spanId": "4f2e2b15-8b6d-4a31-8fdb-2a38f5e0b222",
        "pageHint": 4,
        "charStart": 1421,
        "charEnd": 1472,
        "quote": "Lease shall remain in effect for twenty years"
      },
      "sourceAnchor": {
        "pageReference": 4,
        "boundingBox": { "x": 120, "y": 210, "width": 180, "height": 50 },
        "matchedText": "Lease shall remain in effect for twenty years",
        "method": "vision_verified",
        "confidence": "high",
        "reason": null
      },
      "findingState": "open",
      "remediationStatus": "open",
      "createdAt": "2026-02-18T04:00:00.000Z"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

Access Scope

Results are scoped to the calling API key organization. A report can be returned when the caller organization is either the report owner organization or the applicant organization on the report.

Implementation note: hybrid anchors are additive fields used by the split remediation UI and API/CLI workflows; existing deficiency consumers remain backward-compatible.

sessionId, applicationId, documentId, requirementSource, and requirementId can be null for legacy or packet-level findings that do not carry that linkage.

On this page