Evidence Agent

Cite the evidence behind every refund decision.

The Evidence Agent fetches carrier-tracking, Stripe disputes, and merchant ToS at decision time, classifies what comes back, and writes an EVIDENCE_FETCH entry into the ledger. Policies stop guessing. Auditors stop reconstructing.

Three seeded sources

Bounded scope. Production-ready coverage.

v1 ships three sources we run end-to-end ourselves. No customer-defined fetchers, no PDF/OCR, no logged-in extraction.

CARRIER_TRACKING

Carrier tracking

FedEx, UPS, USPS, DHL. Did the package actually deliver? When? Where? Cached 60s, parsed via carrier APIs with a Claude Haiku fallback when carrier responses are unstructured.

STRIPE_DISPUTE

Stripe disputes

Active dispute? Evidence due date? Reason code? Pulled directly from the Stripe API with a 5s cache so refund-on-disputed-charge policies decide on current state, not stale data.

TOS_PAGE

Merchant ToS

Headless Playwright fetch + Claude Haiku parse of the merchant's posted Terms of Service. Cached 24h. Lets policies cite the actual posted refund window — not what someone remembered six months ago.

How a decision cites evidence

Policy → fetch → classify → ledger.

Evidence Agent slots into the existing Axiru flow. No new repo for you, no new buyer, no new dashboard.

Step 1

Policy asks for evidence

A policy rule references a seeded source. Example: deny refund if carrier shows delivered AND merchant ToS refund window has expired.

Step 2

Evidence Agent fetches

Runs on dedicated Fly.io machines with Playwright. p50 ≤ 8s, p95 ≤ 15s. 50 fetches per minute per machine, with hard $0.10/fetch cost ceiling.

Step 3

Output is classified

Microsoft Presidio classifies returned content as NONE, INDIRECT, DIRECT, or SENSITIVE. SENSITIVE auto-blocks at v1. Confidence below 0.85 routes to the existing approval router.

Step 4

Ledger gets an entry

Every fetch lands as an EVIDENCE_FETCH ledger entry, linked to the originating decisionId. Auditors trace the decision back through the policy, the evidence, and the source — without leaving Axiru.

Pricing

$1,500/month add-on. Included at Enterprise.

Evidence Agent is a Growth-tier add-on. Enterprise contracts include it by default.

  • $1,500 / month — Growth add-on
  • 2,500 fetches / month included
  • $0.05 per fetch overage, billed transparently
  • Included at Enterprise — no separate add-on charge
  • Not available on Free or Pro tiers
Security & retention

Bounded inputs. Classified outputs. Tight retention.

The same controls that govern money also govern evidence.

No customer-supplied URLs at v1

Sources are seeded by Axiru. You cannot point Evidence Agent at an arbitrary URL. This eliminates the SSRF, malicious-redirect, and supply-chain attack surfaces of a generic fetcher.

Microsoft Presidio classifier

Every fetched output is classified NONE, INDIRECT, DIRECT, or SENSITIVE. SENSITIVE auto-blocks at v1 — the policy never sees the underlying content; the decision falls through to approval routing.

Retention windows match sensitivity

NONE retains 7 years. INDIRECT and DIRECT retain 1 year. SENSITIVE retains 30 days, opt-in only. All retention windows enforced automatically; no manual purge.

Ledger linkage, not log dumping

Every fetch writes an EVIDENCE_FETCH entry into the same tamper-evident ledger that holds your decisions. Auditors verify the SHA-256 chain without trusting a separate evidence store.

FAQ

Common questions

Plain answers about scope, retention, and where it runs.

Can I add my own evidence sources at v1?

No. v1 ships with three seeded sources only — carrier tracking, Stripe disputes, ToS pages. Customer-defined sources, PDF/OCR, real-time streaming, and logged-in extraction are explicitly out of scope at v1.

How is sensitive content handled?

Microsoft Presidio classifies every fetch. SENSITIVE outputs auto-block at v1; the underlying artifact is retained 30 days only and only if you opt in. INDIRECT and DIRECT artifacts retain 1 year; NONE retains 7 years.

What happens when the evidence is ambiguous?

Confidence threshold is 0.85. Below that, the decision routes through Axiru's existing approval router with the evidence attached, and a reviewer can Accept, Override, or Reject.

Where does Evidence Agent run?

Dedicated Fly.io machines so headless browser load is isolated from the policy engine. Throughput is 50 fetches per minute per machine. Cost-capped at $500/month at v1.

How does it appear in the ledger?

Every fetch writes an EVIDENCE_FETCH entry linked to the originating decisionId. The decision view shows the evidence inline; auditors can re-derive the chain without leaving Axiru.

What's on the API surface?

REST: POST /v1/evidence/fetch, GET /v1/evidence/:id, GET /v1/evidence?decisionId=. Webhooks: evidence.fetched, evidence.review_required. MCP tools: axiru.evidence.fetch / get / list_for_decision.

Next step

Stop reconstructing evidence at audit time.

Wire Evidence Agent in once. Every refund decision carries its own proof — fetched at decision time, sealed in the ledger.

Start in shadow mode first. Move to live enforcement later.