Verdicting as a service

Disputes made easy.

Submit policy, claim and evidence. Get one verdict with a structured proof.

npm @dispution/sdk planned interface

approved / manual_review / rejected

ADJUDICATION POST /v1/disputes

Resolved policy contextobserved 2026-08-16

Returns and delivery

effective at occurrence · version 03

sha256:9f2c…

Evidence manifest3 items · 4,180 tokens

REC
Carrier delivery recordrecord · 1,842 bytes
ev_01
MSG
Customer claimmessage_thread · 944 bytes
ev_02
ORD
Order timelinetimeline · 1,208 bytes
ev_03

Verdictproof complete

Manual review

Confirm whether safe-place delivery was authorised.

0.84 / 0.90
Verdict IDvd_01K3M9…
Scrutinymedium
Schemaproof.v1
01 / CONTEXT

Observe the policy

Capture, version and resolve it at occurrence.

02 / INPUT

Submit the evidence

Send claim and evidence once, idempotently.

03 / OUTPUT

Receive the verdict

Receive a state your system can route.

// The decision system

One request. A bounded path to one verdict.

Four bounded stages. Uncertainty never becomes a guess.

POST /v1/disputes · request lifecyclesame pipeline for sync and async
01 / ADMISSION

Validate before spend.

Authenticate, validate, count and reserve before inference.

size ceiling 40k tokenswrite replay idempotent
02 / CONTEXT

Version policy facts.

Verified sources are captured passively. Each dispute pins the version active at occurrence.

intake daily + automaticprovenance immutable
03 / COURT

Route scrutiny upward.

Each seat gets a three-attempt cross-provider chain. Degradation is named and confidence is capped.

failover 3 attempts / seatscrutiny floor-preserving
04 / SETTLEMENT

Return a complete proof.

Persist proof; deliver by polling or signed webhook.

outcome schema proof.v1
413
Never truncate decisive input

Reject before evidence is dropped.

Failover is included

Every live plan + scrutiny; no surcharge.

202
Async by default

One pollable verdict resource.

200
Manual review is a result

Proof includes the human question.

// Integration surface

Designed to fit the code you already ship.

One typed contract for submission, polling and results.

npm@dispution/sdkinterface preview
import { Dispution } from "@dispution/sdk";

const client = new Dispution({
  apiKey: process.env.DISPUTION_API_KEY
});

const verdict = await client.disputes.create({
  occurredAt: "2026-08-16T10:04:00Z",
  claim: {
    summary: "Order arrived at the wrong address."
  },
  evidence: [{
    id: "ev_01", type: "record", content: record
  }]
});

if (verdict.state === "manual_review") {
  queueForReview(verdict.proof.reviewReason);
}
from dispution import Dispution

client = Dispution()

verdict = client.disputes.create(
    occurred_at="2026-08-16T10:04:00Z",
    claim={
        "summary": "Order arrived at the wrong address."
    },
    evidence=[{
        "id": "ev_01",
        "type": "record",
        "content": record
    }]
)

if verdict.state == "manual_review":
    queue_for_review(verdict.proof.review_reason)
# Illustrative, non-routable request shape
curl --request POST 
  "https://api.example.invalid/v1/disputes" 
  --header "Authorization: Bearer $DISPUTION_API_KEY" 
  --header "Idempotency-Key: case_0192" 
  --header "Content-Type: application/json" 
  --data '{
    "occurred_at": "2026-08-16T10:04:00Z",
    "claim": { "summary": "Wrong address." },
    "evidence": [{ "id": "ev_01", "type": "record" }]
  }'
{
  "verdict_id": "vd_01K3M9...",
  "schema_version": "1",
  "state": "manual_review",
  "confidence": 0.84,
  "threshold": 0.90,
  "proof": {
    "review_reason": "material_fact_missing",
    "review_question": "Was safe-place delivery authorised?",
    "evidence_manifest": ["ev_01"]
  }
}

// Structured proof

The decision is only the first line.

Verdict, evidence trail, policy references and uncertainty.

Full label and machine state
Length-addressed decisive evidence
Confidence reason and uncertainty
Immutable engine and policy provenance
PROOF / vd_01K3M9…
Approved

Summaryconfidence 0.94

Filed on time. Carrier data confirms the wrong postcode.

01
Inside the policy window.

Order timeline + customer claim.

§ 4.1
02
Address mismatch confirmed.

Carrier postcode differs.

§ 4.3
ev_01 · bytes 84—140sha256:ad81…

Delivery event recorded at postcode 101 00, not the destination postcode 186 00.

// System properties

Precision at every boundary.

Policy time, custody, outcomes and delivery—explicit.

Policy provenance

Observed time is not effective time.

Capture history never rewrites policy history.

occurred_at
2026-08-16T10:04:00Z
effective_from
2026-08-01T00:00:00Z
observed_at
2026-08-15T03:18:42Z
content_hash
sha256:9f2c…

Evidence custody

Keep the proof. Not the evidence body.

Persist the explanation, not case content.

Transient

  • Policy and claim text
  • Evidence content
  • Generated report bytes

Persisted

  • Verdict and proof
  • SHA-256 manifest
  • Metering facts

Three states, always

Uncertainty is a real state.

Approvedapproved
Manual reviewmanual_review
Rejectedrejected

Integration posture

One verdict, safe to retry.

Retry safely. Poll or receive a signed event.

verdict.completed
Dispution-Event: verdict.completed
Dispution-Delivery: whd_01K...
Dispution-Signature: t=...,v1=...

{ "verdict_id": "vd_01K3M9...",
  "state": "manual_review" }

// Subscription tiers

Buy capacity. Never a different answer.

Same benches and proof rules on every plan.

Dispution Free simulation

$0

Deterministic integration testing.

Simulation onlyNo live decision units
  • 2 seats
  • 4 test-only API keys
  • 1 webhook endpoint
  • 1 policy source
  • 3 months test retention
Start simulating

Metered usage

$0 idle

$3 active month, then $0.05 / unit.

Uncapped usageRate-card settlement
  • 15 seats
  • 25 API keys
  • 10 webhook endpoints
  • 10 policy sources
  • Up to 60 months retention
Choose Metered

Professional prepaid

$39 / month

Live capacity for small teams.

850 unitsIncluded each period
  • 5 seats
  • 10 API keys
  • 3 webhook endpoints
  • 3 policy sources
  • Up to 24 months retention
Choose Professional

Business prepaid

$399 / month

Largest self-serve allowance.

12,000 unitsIncluded each period
  • 50 seats
  • 100 API keys
  • 25 webhook endpoints
  • 25 policy sources
  • Up to 84 months retention
Choose Business
No automatic prepaid overage

Usage stops before surprise spend.

Extra units stay available

$0.05 each; no expiry while open.

Paid plans include a sandbox

Real bench + deterministic simulation.

// Privacy / data standards

Privacy is a system property.

Where case data may exist—and for how long.

Case-data lifecyclecurrent contract
Synchronous evidence
Request memory only

Policy, claim and evidence.

Never persisted

No storage, queues or telemetry.

Asynchronous evidence
Worker-encrypted private R2

Deleted on completion; 48-hour worst-case lifecycle backstop.

Never placed on the Queue

Pointer, nonce, key and hash only.

Durable result
Verdict, proof and SHA-256 manifest

Findings, provenance and usage facts.

No raw reasoning

No excerpts, prompts or model output.

Generated reports
Rendered and streamed on demand

Generated for authorised viewers.

Never stored or cached

No durable report bytes.

Current handling contracts—not claims of an external certification. Operational output, not legal advice.

// Product boundaries

Trust requires explicit limits.

Operational verdicts—never legal advice or false certainty.

OutcomeExactly one explicit decision stateclosed enum
EvidenceNo silent truncation and no durable body storagecustody rule
ConfidenceCalibrated against scrutiny and bench depthnot decorative
PlansCapacity and operations, never a different truthsame benches
Legal scopeOperational verdict, not legal adviceclear boundary

// Start with the shape

Build around a decision, not a black box.

Start with deterministic simulation.