ProofLink

Developer Integration v1

Integrate counterparty risk before execution.

ProofLink gives autonomous agents an exposure-aware policy decision before they transfer funds, data, or tasks.

Quick start

One request before value moves.

Send the ERC-8004 Agent ID as a decimal string. The current task type is web-research.

curl
curl -sS https://api.prooflink.site/v1/risk-decisions \
  -H 'Content-Type: application/json' \
  -d '{
    "agent_id": "13294",
    "task_type": "web-research",
    "exposure_usd": 100
  }'
JavaScript / TypeScript
const response = await fetch(
  "https://api.prooflink.site/v1/risk-decisions",
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      agent_id: "13294",
      task_type: "web-research",
      exposure_usd: 100,
    }),
  },
);

if (!response.ok) throw new Error(`ProofLink HTTP ${response.status}`);
const decision = await response.json();
Python
import json
from urllib.request import Request, urlopen

payload = json.dumps({
    "agent_id": "13294",
    "task_type": "web-research",
    "exposure_usd": 100,
}).encode()

request = Request(
    "https://api.prooflink.site/v1/risk-decisions",
    data=payload,
    headers={"Content-Type": "application/json"},
    method="POST",
)

with urlopen(request, timeout=20) as response:
    decision = json.load(response)

Decision handling

ALLOW

Proceed under the current policy and requested exposure. This is not a guarantee.

ESCROW

Reduce exposure or use an external escrow or equivalent safeguard.

DENY

Stop execution. Missing evidence alone does not produce DENY.

Autonomous agent pattern
async function beforeExecution(agentId, task, exposureUsd) {
  const decision = await prooflinkCheck(agentId, task, exposureUsd);

  switch (decision.decision) {
    case "ALLOW":
      return executeTask(); // Policy recommendation, not a guarantee.
    case "ESCROW":
      return useSafeguardOrReduceExposure(decision.recommended_exposure_usd);
    case "DENY":
      return stopExecution();
  }
}

Risk Report v2

Immutable intelligence for the exact decision.

Fetch the report using the returned decision_id. It includes the economic profile, qualified graph, coverage limitations and exact evidence trace used at decision time.

  • • Qualified counterparties and economic events
  • • Event-frequency concentration—not dollar exposure
  • • Unique ERC-8004 reputation authors
  • • Bounded graph, coverage and snapshot trace
Fetch Risk Report v2
const reportResponse = await fetch(
  `https://api.prooflink.site/v1/risk-decisions/${decision.decision_id}/report`,
);

if (reportResponse.status === 404) {
  // Historical decisions may predate Risk Report v2.
} else if (!reportResponse.ok) {
  throw new Error(`Report HTTP ${reportResponse.status}`);
}

const riskReport = await reportResponse.json();

Error handling

400 INVALID_JSON / INVALID_REQUEST

Malformed JSON or a request that does not match the frozen decision contract.

404 AGENT_NOT_FOUND

The Agent ID is not present in the canonical Base ERC-8004 Identity Registry.

422 UNSUPPORTED_TASK_TYPE

Only task_type web-research is currently supported.

503 EVIDENCE_SOURCE_UNAVAILABLE

A required live evidence source is temporarily unavailable; respect Retry-After.

404 REPORT_NOT_AVAILABLE

The decision exists but predates immutable Risk Report v2 persistence.

Authenticated outcome collection

Report outcomes separately.

Outcome reporting is append-only and separate from the pre-transaction decision. It is designed to support future empirical evaluation; ProofLink does not currently retrain from these reports.

Outcome writes require a manually provisioned integration credential with outcome:write. Authentication identifies the submitting integration; records remain CLIENT_REPORTED / UNVERIFIED. Contact ProofLink for v1 provisioning—there is no self-service key generation.
Outcome v1 request
curl -sS https://api.prooflink.site/v1/outcomes \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $PROOFLINK_API_KEY" \
  -d '{
    "decision_id": "YOUR_DECISION_ID",
    "outcome": "SUCCESS",
    "reported_at": "2026-08-20T10:00:00Z",
    "source": "CLIENT_REPORTED",
    "task_completed": true
  }'

Outcome verification

Confirm Base facts independently.

Include a transaction hash in a client-reported outcome, then request verification with an outcome:verify credential. ProofLink confirms normalized Base transaction and receipt facts and whether the analyzed agent wallet was sender or recipient.

ONCHAIN_EVIDENCE_FOUND does not upgrade the reported outcome. A successful EVM receipt confirms execution without revert—it does not prove off-chain task completion, task quality, USD exposure, refund, or dispute.
Verify outcome transaction
curl -sS -X POST \
  https://api.prooflink.site/v1/outcomes/YOUR_OUTCOME_ID/verify \
  -H "Authorization: Bearer $PROOFLINK_API_KEY"
Read normalized verifications
curl -sS \
  https://api.prooflink.site/v1/outcomes/YOUR_OUTCOME_ID/verifications \
  -H "Authorization: Bearer $PROOFLINK_API_KEY"

Current limitations

Only task_type web-research is supported.
Current live evidence is Base ERC-8004.
High-volume cold wallets may fall back to insufficient-evidence ESCROW when bounded ingestion times out.
The Alchemy path does not provide internal-native history.
Confidence is evidence quality and completeness—not safety probability.
Live analysis is not an official Sonic integration.