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

# Independently verify a self-contained proof bundle against nothing but

> itself — no engine, no database, no tenant state. POST an approved decision's verifiable_bundle VERBATIM to confirm that verdict without trusting the decision…

itself — no engine, no database, no tenant state. POST an approved
decision's `verifiable_bundle` VERBATIM to confirm that verdict without
trusting the decision endpoint (the same check ships as the open,
dependency-light `nsr-proof-core` crate for fully offline verification).
Always returns 200 with a verdict: an unsound proof is a valid *answer*
(`verified:false` + the located reason), not a client error. The body is
the raw `knowledge::ProofBundle` — `&#123;facts, rules, proof, org_id?, as_of?&#125;`
— exactly as `verifiable_bundle` emits it; hand-authored bundles are
documented in docs/GETTING\_STARTED\_SCENARIOS.md.

**Required scope:** `write`

### Request body

JSON body of type `object`.

### Response

`ProofVerifyResponse`

<ResponseField name="failed_step" type="integer">
  The step index the failure anchors to, when the failure is step-local.
</ResponseField>

<ResponseField name="reason" type="string">
  Present only on failure: the located reason the proof did not check.
</ResponseField>

<ResponseField name="verified" type="boolean" required>
  True iff the derivation checks against the bundle's own facts and rules.
</ResponseField>

### Status codes

| Code  | Meaning                                                            |
| ----- | ------------------------------------------------------------------ |
| `200` | Verification verdict (200 for BOTH verified and unverified proofs) |
| `401` | Unauthorized — missing or invalid credentials                      |
| `403` | Forbidden — the key/token lacks the required scope                 |
| `429` | Rate limited — see Retry-After / X-RateLimit-Reset                 |

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url 'https://api.nsr.stateset.com/v1/proofs/verify' \
    --header 'X-API-Key: YOUR_API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{}'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "failed_step": 1,
    "reason": "Two-person tent, green — replacement for damaged pole set.",
    "verified": true
  }
  ```
</ResponseExample>
