V

Verify AI actions before they run

Verifact evaluates proposals against your sources and returns allow, deny, or needs_review with a tamper proof audit record.

What Verifact does

AI / agent action

Before the agent takes action, a request for approval is sent to Verifact

Verifact

Validates claims against requirements, and returns a decision

verifyrequirementsdecision

Downstream action

Actions that are triggered or blocked after evaluation

allowdenyneeds_review
Verify
Check claims against provided sources and references so proposals are grounded.
Authorize
Return a clear decision: allow, deny, or needs_review so callers can act predictably.
Audit
Record decisions and reasons so actions are traceable and accountable.

Establish your sources

Verifact verifies from the sources you provide — no browsing, no guessing. By default, verify & authorize run deterministically for safer, auditable outcomes.

  • You may include a source via inline text with the request
  • If you have a URL or document you can ingest it once via POST /v2/sources (fetch + extract + persist), then reuse the returned source_id everywhere.
  • If a claim can’t be supported, Verifact returns needs_review or deny with reasons.
{
  "claims": [{ "id": "c1", "text": "Customer was charged twice for order #1842." }],
  "sources": [
    { "source_id": "s1", "type": "text", "title": "Support note", "content": "Charge posted twice on 2026-01-08 for order #1842." }
  ]
}

Sample request and response

Authorize API: Authorize agent actions

High-stakes example: Approve refunds & require clear auditability
Agent request (example).

  const payload = {
    action: { type: "refund", params: { order_id: "order_1842", amount: 550, currency: "USD" } },
    claims: [{ id: "c1", text: "Order #1842 was charged twice" }],
    sources: [
      { source_id: "s1", type: "text", title: "Refund policy", text: "Refunds over $500 require manager approval unless duplicate charge is found." },
      { source_id: "s2", type: "text", title: "Support ticket #1842", text: "Order #1842 was charged twice; recommend full refund of $550." }
    ],
    requirements: { citations: "required" }
  };

  async function evaluate() {
    const res = await fetch("https://verifact-api.fly.dev/v2/authorize", {
      method: "POST",
      headers: { "Content-Type": "application/json", "Authorization": "Bearer $API_KEY" },
      body: JSON.stringify(payload)
    });
    const artifact = await res.json();
    console.log(artifact);
  }
  evaluate();
Verifact response (example).
{
  "request_id": "req_001",
  "request_hash": "sha256:abcd1234...",
  "decision": "allow",
  "reason": "coverage_met",
  "coverage_score": 0.95,
  "diagnostics": [ { "claim_id": "c1", "claim_text": "Order #1842 was charged twice", "coverage": 1.0 } ],
  "action_ref": { "type": "refund", "hash": "sha256:efgh5678..." },
  "audit": { "record_id": "28fca883-b2f8-4d12-9c6b-0123456789ab", "record_hash": "sha256:32514406a64...", "key_id": "audit_v2", "merkle_root": "sha256:5b0ab5785e0b...", "proof": [ { "hash": "sha256:aaa111...", "position": "left" }, { "hash": "sha256:bbb222...", "position": "right" } ] }
}