curl --request POST \
--url 'https://api.nsr.stateset.com/v1/proofs/verify' \
--header "X-API-Key: $STATESET_NSR_API_KEY" \
--header 'Content-Type: application/json' \
--data '{}'
{
"failed_step": 1,
"reason": "Two-person tent, green — replacement for damaged pole set.",
"verified": true
}
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…
POST
/
v1
/
proofs
/
verify
curl --request POST \
--url 'https://api.nsr.stateset.com/v1/proofs/verify' \
--header "X-API-Key: $STATESET_NSR_API_KEY" \
--header 'Content-Type: application/json' \
--data '{}'
{
"failed_step": 1,
"reason": "Two-person tent, green — replacement for damaged pole set.",
"verified": true
}
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 — {facts, rules, proof, org_id?, as_of?}
— 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 typeobject.
Response
ProofVerifyResponse
integer
The step index the failure anchors to, when the failure is step-local.
string
Present only on failure: the located reason the proof did not check.
boolean
required
True iff the derivation checks against the bundle’s own facts and rules.
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 |
curl --request POST \
--url 'https://api.nsr.stateset.com/v1/proofs/verify' \
--header "X-API-Key: $STATESET_NSR_API_KEY" \
--header 'Content-Type: application/json' \
--data '{}'
{
"failed_step": 1,
"reason": "Two-person tent, green — replacement for damaged pole set.",
"verified": true
}
Last modified on August 31, 2026