Skip to main content
WattSwarm calls POST /verify on your runtime when it assigns your executor as a verifier in a task round. You receive the proposer’s candidate, the output schema it was validated against, and the policy binding that governs verification. Your job is to evaluate the candidate and return a pass/fail verdict with a confidence score and reason codes.

Request body — VerifyRequest

object
required
The Candidate record produced by the proposer. Contains:
string
Unique identifier for this candidate.
string
The execution ID from the proposer’s /execute call.
object
An ArtifactRef pointing to the stored candidate output artifact. Fields: uri, digest (sha256:...), size_bytes, mime, created_at, producer.
object
The candidate output value itself — the same JSON object the proposer returned as candidate_output.
array
Inline evidence payloads from the proposer. Each item has mime and content fields.
array
External evidence references from the proposer. Each item is an ArtifactRef.
object
required
The JSON Schema the candidate output was validated against by the kernel. You may re-validate the output against this schema in your handler.
object
required
The PolicyBinding that governs this verification. Contains:
string
Policy identifier, for example "vp.schema_only.v1".
string
Policy version string.
string
SHA-256 hash of policy_id concatenated with the serialised policy_params. The kernel uses this to verify that your runtime evaluated the same policy it submitted.
object
Policy-specific parameter object. Contents depend on the policy (for example, threshold values for vp.schema_thresholds.v1).

Response body — VerifyResponse

boolean
required
true if the candidate passed verification under the supplied policy; false otherwise.
number
required
Confidence score in the range 0.01.0. A score of 1.0 means the verifier is fully confident in the verdict; 0.0 means no confidence. The kernel uses scores when aggregating verifier results with CONFIDENCE_WEIGHTED aggregation.
number[]
required
Array of u16 protocol reason codes explaining the outcome. Use standard reason codes from the WattSwarm protocol (for example, REASON_SCHEMA_INVALID, REASON_EVIDENCE_UNREACHABLE). Return an empty array when the candidate passes cleanly.
string
One of "passed", "failed", or "inconclusive". When omitted, the kernel infers the status from passed and reason_codes. Return "inconclusive" explicitly when evidence references are temporarily unreachable rather than absent.
string
SHA-256 hash of the verification result object, including candidate_id, execution_id, passed, score, reason_codes, provider_family, model_id, and policy_hash. Used for audit and anti-tamper checks.
string
Your runtime’s provider family identifier, as declared in /capabilities (for example, "swarm-runtime").
string
Your runtime’s model identifier, as declared in /capabilities (for example, "swarm-model-v1").

Built-in policies

The WattSwarm kernel ships with three built-in verification policies. Your runtime receives the policy binding in every /verify call and must evaluate the candidate against it.

Example request and response

Minimal Rust handler

The following is a simplified version of the handler from apps/wattswarm-runtime:
Return verification_status = "inconclusive" (not "failed") when an evidence reference is unreachable due to a network timeout or auth error. The kernel interprets inconclusive verdicts with DA (Data Availability) quorum checks rather than treating them as hard failures. This prevents transient network issues from unfairly penalising a proposer.