Initial wedge
API/data commerce is the first market.
SettleProof should start where delivery evidence is objective: paid API responses, data feeds, reports, scraping, inventory checks, and other machine-readable resources. The agent pays, the merchant returns data, and the proof is a canonical hash of what was delivered.
Why this wedge first
| Reason | Why it matters |
|---|---|
| Objective delivery | HTTP status, response hash, request id, and timestamp are easier to verify than hotel quality or physical delivery. |
| Agent-native | Autonomous agents already call APIs, scrape pages, buy reports, and query data services programmatically. |
| x402 fit | HTTP 402 can initiate payment; SettleProof adds post-payment settlement evidence after the response is delivered. |
| Low beta risk | Mainnet beta can start with low-value API escrows and strict limits before moving into travel or commerce. |
Canonical proof template
The primary template is api-delivered-v1. Merchants hash a canonical evidence payload, then submit the 32-byte digest as the on-chain proof_hash.
{
"proof_template_id": "api-delivered-v1",
"request_url": "https://merchant.example/api/report",
"status_code": 200,
"content_sha256": "<sha256 response body>",
"delivered_at": "2026-04-28T12:00:00.000Z",
"request_id": "req_123",
"task_hash": "<escrow task hash>",
"merchant_statement": "Merchant attests that the requested API response was delivered for the bound task hash."
}Agent integration shape
import {
AapClient,
SettleProofApiClient,
buildApiDeliveryEvidence,
proofHashForEvidence,
hexToBytes,
} from "@aap/sdk-ts";
const api = new SettleProofApiClient();
const quote = await api.prepareEscrow({
agent_owner: agent.publicKey.toBase58(),
merchant: merchantPubkey.toBase58(),
mint: usdcMint.toBase58(),
amount_stroops: "1000000",
ttl_seconds: 3600,
task_intent: "GET https://merchant.example/api/report?id=abc",
});
await client.createEscrow({
agentOwner: agent,
merchantPubkey,
mint: usdcMint,
amountStroops: 1_000_000n,
taskHash: hexToBytes(quote.data.inputs.task_hash),
ttlSeconds: 3600,
});
const evidence = await buildApiDeliveryEvidence({
requestUrl: "https://merchant.example/api/report?id=abc",
statusCode: 200,
responseBody: responseJson,
taskHash: quote.data.inputs.task_hash,
});
const proofHash = await proofHashForEvidence(evidence);Expansion path
| Phase | Vertical | Evidence maturity |
|---|---|---|
| 1 | API/data commerce | Response hash + request id + status code |
| 2 | Digital goods | Entitlement/license hash |
| 3 | Tickets | Ticket id + entitlement hash |
| 4 | Travel/commerce | Booking/shipment proof with stronger merchant policy |
Positioning
x402 starts the payment. SettleProof settles whether delivery happened.