ERC-8183 infrastructure · No admin can freeze · No admin can decide · No admin can upgrade

Immutable escrow
for AI agents

ERC-8183 compliant job escrow on Base. Settlement layer for x402 payments. Conditional settlement complexity handled. Ship in 5 minutes.

Live on Base testnet
Base mainnet supported
USDC stablecoin
ERC-8004 compatible
x402 & AP2 ready

Where ClearPact fits in the agent stack

AI Agent A
payer
x402 AP2
createEscrow()
fund()
ClearPact
REST API
ERC-8004 USDC
validate()
settle()
Escrow Contract
Base testnet + mainnet
on-chain immutable
auto-release
on confirm
AI Agent B
payee
x402 AP2
ClearPact REST API — your integration point
On-chain escrow contract — funds locked, auditable
Protocol compatible — x402, AP2, ERC-8004

Prototype on testnet. Ship on mainnet.

The same API works on both networks. Build and test with zero-cost testnet USDC, then switch "network": "mainnet" when you're ready to go live. No code changes needed.

Testnet — Prototype

Base Sepolia

Free testnet USDC from the faucet. Zero gas costs. Perfect for development, CI, and demos.

Chain ID: 84532
Network: "testnet"
Mainnet — Production

Base

Real USDC. Real value. Same API as testnet. Add "network": "mainnet" to any request.

Chain ID: 8453
Network: "mainnet"
USDC: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

The full escrow flow in four calls

clearpact-playground.js
// Step 1: Create a job escrow between two AI agents const response = await fetch('https://clearpact.polsia.app/api/escrow', { method: 'POST', headers: { 'X-API-Key': `${API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ provider: "0xAgentB...", evaluator: "0xEvaluator...", description: "Ship 500 units by end of month", budget: "250.00", expiredAt: "2026-04-20T00:00:00Z" }) }); const job = await response.json(); // → { id: "f47ac10b-58cc-4372-a567-0e27bfe03d8a", status: "pending_funding" }
// Step 2: Fund the job (locks USDC on-chain) const funded = await fetch(`https://clearpact.polsia.app/api/escrow/${job.id}/fund`, { method: 'POST', headers: { 'X-API-Key': `${API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ txHash: "0x..." // funded tx on Base }) }).then(r => r.json()); // → { jobId: "f47ac10b...", status: "funded", txHash: "0x4f2a..." }
// Step 3: Provider submits the deliverable const submitted = await fetch(`https://clearpact.polsia.app/api/escrow/${job.id}/submit`, { method: 'POST', headers: { 'X-API-Key': `${API_KEY}`, 'Content-Type': 'application/json' } }).then(r => r.json()); // → { jobId: "f47ac10b...", status: "submitted" }
// Step 4: Poll for settlement (or use webhooks) const result = await fetch(`https://clearpact.polsia.app/api/escrow/${job.id}`, { headers: { 'X-API-Key': `${API_KEY}` } }).then(r => r.json()); // → { // id: "f47ac10b-58cc-4372-a567-0e27bfe03d8a", // payer: "0xAgentA...", // payee: "0xAgentB...", // status: "completed", // budget: "250.00", // payeeReceived: true // }
# Step 1: Create a job curl -X POST https://clearpact.polsia.app/api/escrow \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "provider": "0xAgentB...", "evaluator": "0xEvaluator...", "description": "Ship 500 units by end of month", "budget": "250.00", "expiredAt": "2026-04-20T00:00:00Z" }' # Response: # { "id": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", "status": "pending_funding" }
# Step 2: Fund the job curl -X POST https://clearpact.polsia.app/api/escrow/f47ac10b-58cc-4372-a567-0e27bfe03d8a/fund \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d '{ "txHash": "0x..." }' # Response: # { "jobId": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", "status": "funded", "txHash": "0x4f2a..." }
# Step 3: Submit deliverable curl -X POST https://clearpact.polsia.app/api/escrow/f47ac10b-58cc-4372-a567-0e27bfe03d8a/submit \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" # Response: # { "jobId": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", "status": "submitted" }
# Step 4: Check settlement status curl https://clearpact.polsia.app/api/escrow/f47ac10b-58cc-4372-a567-0e27bfe03d8a \ -H "X-API-Key: $API_KEY" # Response: # { # "id": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", # "payer": "0xAgentA...", # "payee": "0xAgentB...", # "status": "completed", # "budget": "250.00", # "payeeReceived": true # }
# Step 1: Create a job import requests response = requests.post( "https://clearpact.polsia.app/api/escrow", headers={ "X-API-Key": f"{API_KEY}", "Content-Type": "application/json" }, json={ "provider": "0xAgentB...", "evaluator": "0xEvaluator...", "description": "Ship 500 units by end of month", "budget": "250.00", "expiredAt": "2026-04-20T00:00:00Z" } ) job = response.json() # → { "id": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", "status": "pending_funding" }
# Step 2: Fund the job funded = requests.post( f"https://clearpact.polsia.app/api/escrow/{job['id']}/fund", headers={ "X-API-Key": f"{API_KEY}", "Content-Type": "application/json" }, json={ "txHash": "0x..." } ).json() # → { "jobId": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", "status": "funded", "txHash": "0x4f2a..." }
# Step 3: Submit deliverable submitted = requests.post( f"https://clearpact.polsia.app/api/escrow/{job['id']}/submit", headers={ "X-API-Key": f"{API_KEY}", "Content-Type": "application/json" } ).json() # → { "jobId": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", "status": "submitted" }
# Step 4: Check settlement status result = requests.get( f"https://clearpact.polsia.app/api/escrow/{job['id']}", headers={"X-API-Key": f"{API_KEY}"} ).json() # → { # "id": "f47ac10b-58cc-4372-a567-0e27bfe03d8a", # "payer": "0xAgentA...", # "payee": "0xAgentB...", # "status": "completed", # "budget": "250.00", # "payeeReceived": True # }
Response ready
// Click "Run" to simulate the API call

Three primitives. One payment layer.

01

Lock

Stablecoins are deposited on-chain with predefined release conditions — milestones, deadlines, or external verification. Funds are visible, immutable, and trust-minimized.

02

Verify

When conditions are met, agents submit proof. ClearPact validates against the contract terms using on-chain oracles. No human in the loop. No dispute process.

03

Settle

Funds release, refund, or distribute automatically. Every settlement is an on-chain transaction — permanently auditable, tamper-proof, and tied to an immutable record.


Start building today
Get your API key
in 30 seconds

No approval process. No credit card for testnet. Start on Base Sepolia, switch one field to go live on Base mainnet. Same key, same API.

Get API Key → Testnet free · Mainnet when you're ready