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

# Decisions

> Browse, filter, and retrieve authority verification outcomes from the audit database

## Overview

The audit dashboard's Decisions view and the `/audit/decisions` API show every authority verification outcome recorded in the Postgres database — approved, rejected, and pending override.

Requires `audit_db: true` in `GET /health` (Postgres connected).

***

## Listing decisions

```typescript theme={null}
// All recent decisions
const decisions = await client.audit.decisions({ limit: 50 });

// Filter by policy
const claimsDecisions = await client.audit.decisions({
  policyId: "claims-approval",
  limit: 100,
});

// Date range
const todaysDecisions = await client.audit.decisions({
  from: new Date().toISOString().slice(0, 10) + "T00:00:00Z",
  to:   new Date().toISOString().slice(0, 10) + "T23:59:59Z",
});

// Approvals only
const approvals = await client.audit.decisions({
  decision: "approve",
});
```

***

## DecisionRow fields

Each row in the decision list:

```typescript theme={null}
interface DecisionRow {
  execution_id: string;
  execution_fingerprint: string;
  policy_id: string;
  policy_version: string;
  decision: string;              // "approve" | "reject" | custom action string
  execution_state: string;       // "completed" | "pending_override"
  runtimeVersion: string;
  runtimeHash: string;
  executed_at: string;           // ISO 8601
  recorded_at: string;           // ISO 8601
  verification_valid: boolean | null;
  signature_verified: "verified" | "failed" | "unknown";
  runtime_verified: "verified" | "failed" | "unknown";
  schema_compatible: "verified" | "failed" | "unknown";
  verified_at: string | null;
}
```

***

## Retrieving a single decision

```typescript theme={null}
const detail = await client.audit.decision("claim-CLM-2024-00441");

console.log(detail.id);                    // auto-increment row ID
console.log(detail.execution_id);          // "claim-CLM-2024-00441"
console.log(detail.execution_fingerprint); // SHA-256 of canonical signals
console.log(detail.policy_id);             // "claims-approval"
console.log(detail.policy_version);        // "1.0.0"
console.log(detail.schema_version);        // "1.0.0"
console.log(detail.decision);              // "approve"
console.log(detail.execution_state);       // "completed"
console.log(detail.signals_hash);          // SHA-256 of signals
console.log(detail.signature);             // Ed25519 signature
console.log(detail.attestation);           // full attestation object
console.log(detail.executed_at);           // ISO timestamp
console.log(detail.recorded_at);           // ISO timestamp
```

***

## curl examples

```bash theme={null}
# List recent decisions
curl "http://localhost:3000/audit/decisions?limit=20" \
  -H "Authorization: Bearer $PARMANA_API_KEY" | jq .

# Filter by policy and date range
curl "http://localhost:3000/audit/decisions?policyId=claims-approval&from=2024-01-01T00:00:00Z&limit=100" \
  -H "Authorization: Bearer $PARMANA_API_KEY" | jq .

# Single decision
curl "http://localhost:3000/audit/decisions/claim-CLM-2024-00441" \
  -H "Authorization: Bearer $PARMANA_API_KEY" | jq .
```

***

## Dashboard

Navigate to [http://localhost:8081](http://localhost:8081) to browse decisions in the UI. The dashboard provides:

* Paginated decision timeline
* Filter by policy ID, decision outcome, and date range
* Click to expand full attestation detail for any decision
* Verification status indicators per decision

***

## Troubleshooting

**Empty results** — If Postgres was not connected when decisions were executed, they were not recorded. Check `audit_db` in `/health` and verify Postgres is running.

**`decision` field shows raw action string, not "approve"** — The `decision` column stores the `action` value from the policy rule. If your policy uses custom action names (e.g., `"manual_review"`, `"hold"`), those appear here. Filter by the exact string your policy uses.

**`verification_valid: null`** — The attestation has not been verified yet. Run `POST /verify` with the attestation to populate the verification columns.
