Hermes Plant logo

Hermes Plant

Agent Action Safety for autonomous tools

Open navigation

Evidence Verification API

$0.05/callLoop-callable

Verify the evidence bundle before trusting a paid agent result.

POST /api/agent-services/evidence/verify
x402evidenceai-agentsverificationagent-commerceaudit

Answer-engine brief

Canonical answer for Evidence Verification API

Pricing
Direct answer
Evidence Verification API is a deterministic x402 API for AI agents. Verify the evidence bundle before trusting a paid agent result.
When to use
Use it when an agent needs a repeatable computed result with evidence instead of asking an LLM to improvise a number or risk decision.
Inputs
subject, artifacts, policy
Outputs
status, service, requestId, decision, confidence
Pricing
$0.05 per call, paid over x402 in USDC on Base. No API key is required.
Citation target
https://hermesplant.com/agent-services/evidence

What it does

Verify an agent-commerce evidence bundle before trusting a paid result. Checks x402 challenge, receipt, policy-decision, and service-response artifacts; endpoint, method, network, payTo, and price binding; artifact source, freshness, hashes, and synthetic-proof leakage. Returns verified / needs_review / rejected / insufficient_evidence with per-rule evidence. Deterministic — loop it over every paid call in an agent run.

  • Checks x402 challenge, policy decision, receipt, and service response artifacts
  • Rejects endpoint, method, network, payTo, and price mismatches
  • Returns a run-log policy record with per-rule evidence

Example request

POST /api/agent-services/evidence/verify

{
  "subject": {
    "kind": "agent_service_call",
    "serviceId": "payment-policy-decide",
    "method": "POST",
    "runId": "run-42"
  },
  "artifacts": [
    {
      "type": "x402_challenge",
      "source": "https://hermesplant.com/.well-known/x402",
      "serviceId": "payment-policy-decide",
      "endpoint": "/api/agent-services/payment-policy/decide",
      "method": "POST",
      "network": "eip155:8453",
      "priceCents": 5,
      "hash": {
        "algorithm": "sha256",
        "value": "<challenge-sha256>"
      }
    }
  ],
  "policy": {
    "expectedServiceId": "payment-policy-decide",
    "expectedNetwork": "eip155:8453",
    "expectedPriceCents": 5,
    "requireX402Challenge": true,
    "requireArtifactHashes": true
  }
}

Example response (HTTP 200)

Deterministic — the same inputs always return the same audited output.

{
  "status": "verified",
  "service": "evidence-verify",
  "requestId": "ev_<uuid>",
  "decision": "verified",
  "confidence": 0.94,
  "verified": true,
  "artifactSummary": {
    "total": 3,
    "hashed": 3,
    "synthetic": 0
  },
  "missingArtifacts": [],
  "reasonCodes": [
    "evidence.verified"
  ],
  "recommendedAction": "persist_evidence_and_use_result"
}

Input schema

Top-level request fields. Nested shapes are shown in the example above and the OpenAPI spec.

FieldTypeRequiredDescription
subjectobjectOptional run subject: kind, serviceId, endpoint, method, resourceUrl, runId.
artifactsarrayYesEvidence artifacts (shared Hermes contract): x402_challenge, x402_receipt, payment_policy_decision, service_response, agent_run_log, human_approval, and other typed artifacts.
policyobjectVerification policy: expected serviceId/endpoint/method/network/payTo/priceCents, allowedSources, minArtifacts, maxArtifactAgeSeconds, and require* flags per artifact type.

How to call it over x402

  1. 1. Send the request. The first unpaid call returns HTTP 402 with an x402 payment challenge — $0.05, USDC on Base, and the recipient.
  2. 2. Pay per call. Your x402 client signs the USDC payment and retries automatically — no API key, no account, no subscription. New to x402?
  3. 3. Read the result. HTTP 200 returns the computed values plus evidence-backed findings.

With the x402 fetch client (Node / TypeScript)

import { wrapFetchWithPayment } from "@x402/fetch";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.AGENT_WALLET_KEY);
const pay = wrapFetchWithPayment(fetch, account); // USDC on Base

const res = await pay("https://hermesplant.com/api/agent-services/evidence/verify", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
  "subject": {
    "kind": "agent_service_call",
    "serviceId": "payment-policy-decide",
    "method": "POST",
    "runId": "run-42"
  },
  "artifacts": [
    {
      "type": "x402_challenge",
      "source": "https://hermesplant.com/.well-known/x402",
      "serviceId": "payment-policy-decide",
      "endpoint": "/api/agent-services/payment-policy/decide",
      "method": "POST",
      "network": "eip155:8453",
      "priceCents": 5,
      "hash": {
        "algorithm": "sha256",
        "value": "<challenge-sha256>"
      }
    }
  ],
  "policy": {
    "expectedServiceId": "payment-policy-decide",
    "expectedNetwork": "eip155:8453",
    "expectedPriceCents": 5,
    "requireX402Challenge": true,
    "requireArtifactHashes": true
  }
}),
});

const result = await res.json();

Inspect the 402 with curl

curl -i -X POST https://hermesplant.com/api/agent-services/evidence/verify \
  -H "content-type: application/json" \
  -d '{"subject":{"kind":"agent_service_call","serviceId":"payment-policy-decide","method":"POST","runId":"run-42"},"artifacts":[{"type":"x402_challenge","source":"https://hermesplant.com/.well-known/x402","serviceId":"payment-policy-decide","endpoint":"/api/agent-services/payment-policy/decide","method":"POST","network":"eip155:8453","priceCents":5,"hash":{"algorithm":"sha256","value":"<challenge-sha256>"}}],"policy":{"expectedServiceId":"payment-policy-decide","expectedNetwork":"eip155:8453","expectedPriceCents":5,"requireX402Challenge":true,"requireArtifactHashes":true}}'
# → HTTP/1.1 402 Payment Required  (x402 challenge: price, USDC asset, Base network, recipient)
# → sign the USDC-on-Base payment and retry to receive HTTP 200

Prefer no wallet? Get a free API key (250 calls/mo) and send it as X-API-Key instead of signing an x402 payment — the same call, no crypto, ideal for looping over many records.

Prefer zero code? This endpoint is also exposed as a tool on the Hermes Plant MCP server, so an MCP-capable agent can call it with its own x402 wallet.

Other agent services

Agent Action Safety Quick Gate$0.01

A one-cent safety gate for every consequential agent action.

Agent Action Safety Loop$0.25

Score, triage, receipt, and status in one agent-safety workflow.

x402 Demand Provenance Check$0.05

Separate candidate demand from owner-funded and duplicate x402 activity.

Assurance Attest$0.05

A signed, verifiable receipt for every action your agent takes.

Payment Policy Decision API$0.05

Decide whether an agent should pay before it signs.

MCP Server Risk Analyzer$0.05

Score an MCP server before your agent installs it.

DestructGuard Command Score$0.10

Catch destructive agent commands before they run.

ReviewQueue Agent Submit$0.25

Route risky agent actions to human approval.

EmailGuard$0.02

Validate & normalize every contact record your agent touches.

WalletGuard$0.10

Per-wallet AML screening inside your agent's loop.

CashflowLens$0.20

NPV, IRR, XIRR & DCF valuation in a single call.

WaterfallLens$0.25

LP/GP distribution waterfalls, solved exactly.

OptionLens$0.25

Black-Scholes option pricing with the full Greeks.

BondLens$0.25

Yield, duration, convexity & loan amortization.

PortfolioGuard$0.15

Portfolio risk scored straight from holdings.

DealAnalyzer$0.25

Full deal underwriting — DCF, returns, sensitivity & waterfall in one call.

Agent Spend Assurance$0.25

One signed preflight for an autonomous x402 payment: WalletGuard counterparty screening, Payment Policy challenge validation, and structured evidence verification.

Investment Evidence Bundle$0.25

CashflowLens return and DCF analytics plus PortfolioGuard concentration and risk scoring in one paid call, with structured internal evidence and a tamper-evident signed receipt.

Start first paid call stepsAPI docs← All agent services

Need a calculator that isn’t here yet? contact@hermesplant.com