Pre-execution safety checks for AI DeFi agents. Binary verdict in under 300ms.
Every major AI agent framework — LangChain, ElizaOS, Coinbase AgentKit — lets agents execute on-chain with zero pre-execution safety checks.
A bridge exploit goes live. The agent keeps bridging. A stablecoin depegs. The agent keeps swapping. An RPC returns corrupted data. The agent acts on it.
$2.8B+ was lost to DeFi exploits in 2024. The data existed. Nobody was checking it.
One API call before any on-chain action. Binary answer. Under 300ms.
curl -X POST https://api.verifyproceed.com/v1/acp/guard \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"bridge","chain":"base","amount_usd":50000}'
{
"verdict": "proceed",
"confidence": 0.95,
"risk": "low",
"expires_in": 300,
"decision": {
"action": "execute",
"reason": "All safety checks passed."
},
"evidence": [...],
"failure_modes": []
}
If verdict is block — the agent stops. No human needed. No post-mortem needed.
https://verifyproceed.com/get-api-key
100 calls/month. No card required.
# Returns HTTP 402 (expected) — proves the API is live
curl -X POST https://api.verifyproceed.com/v1/acp/guard \
-H "Content-Type: application/json" \
-d '{"action":"generic","chain":"base"}'
curl -X POST https://api.verifyproceed.com/v1/acp/guard \
-H "Authorization: Bearer vp_your_key_here" \
-H "Content-Type: application/json" \
-d '{"action":"generic","chain":"base"}'
# pip install requests
import requests
response = requests.post(
"https://api.verifyproceed.com/v1/acp/guard",
headers={
"Authorization": "Bearer vp_your_key_here",
"Content-Type": "application/json",
},
json={
"action": "bridge",
"chain": "base",
"amount_usd": 50000,
},
)
result = response.json()
if result["verdict"] == "proceed":
execute_bridge()
else:
print("Blocked:", result["decision"]["reason"])
const response = await fetch(
"https://api.verifyproceed.com/v1/acp/guard",
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.VP_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
action: "swap",
chain: "base",
amount_usd: 10000,
}),
}
);
const { verdict, decision } = await response.json();
if (verdict !== "proceed") {
console.log("Blocked:", decision.reason);
return;
}
// safe to execute
import type { Action, IAgentRuntime, Memory } from "@elizaos/core";
export const guardAction: Action = {
name: "GUARD_CHECK",
description: "Run VerifyProceed pre-execution safety check before any on-chain action",
async handler(runtime: IAgentRuntime, message: Memory) {
const res = await fetch(
"https://api.verifyproceed.com/v1/acp/guard",
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.VP_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
action: message.content.action ?? "generic",
chain: "base",
amount_usd: message.content.amount_usd ?? 0,
}),
}
);
const verdict = await res.json();
if (verdict.verdict !== "proceed") {
return { text: `Action blocked: ${verdict.decision.reason}` };
}
return { text: "Guard check passed — proceeding." };
},
};
from langchain.tools import tool
import requests
@tool
def guard_check(action: str, chain: str = "base", amount_usd: float = 0) -> str:
"""Run a pre-execution safety check before any DeFi action."""
response = requests.post(
"https://api.verifyproceed.com/v1/acp/guard",
headers={"Authorization": f"Bearer {VP_API_KEY}"},
json={"action": action, "chain": chain, "amount_usd": amount_usd},
)
result = response.json()
return f"verdict:{result['verdict']} confidence:{result['confidence']}"
Base URL: https://api.verifyproceed.com
Private URL: https://dupfyqqbvkrmzjexwukd.supabase.co
| Method | Path | Auth | Cost | Description |
|---|---|---|---|---|
| GET | /health |
None | Free | Liveness check |
| GET | /v1/capabilities |
None | Free | Capability manifest |
| GET | /v1/agents |
None | Free | List available agents |
| POST | /v1/acp/guard |
Bearer or x402 | $0.01 | ACP pre-execution guard |
| POST | /v1/acp/decide |
Bearer or x402 | $0.01 | ACP policy-driven decision |
| POST | /functions/v1/guard |
Bearer | Free tier | Key-authenticated guard |
| POST | /functions/v1/api-key-signup |
None | Free | Get API key |
{
"action": "swap | transfer | bridge | yield_deposit | generic",
"chain": "base | ethereum | arbitrum | optimism | polygon",
"pair_address": "0x... (optional — for DEX checks)",
"stablecoin_asset_id": "usd-coin (optional — for depeg checks)",
"rpc_url": "https://... (optional — overrides default RPC)",
"bridge_status_url": "https://... (optional — for bridge exploit check)",
"amount_usd": 50000,
"strict_mode": true
}
| Check | What it detects |
|---|---|
| RPC health | Corrupted or lagging RPC node data |
| Stablecoin depeg | USDC / USDT / DAI deviation from $1.00 peg |
| Bridge exploit monitor | Live exploits and active incidents |
| DEX price integrity | Manipulation signals and liquidity drain |
| Rug pull risk | Pair age, FDV ratio, liquidity depth |
All checks run in parallel. Total latency: <300ms p99.
{
"verdict": "proceed | wait | block",
"confidence": 0.95,
"risk": "low | medium | high",
"expires_in": 300,
"decision": {
"action": "execute | retry | halt",
"reason": "All safety checks passed.",
"constraints": {}
},
"evidence": [...],
"failure_modes": []
}
| Verdict | Meaning |
|---|---|
proceed |
All checks passed — safe to execute |
wait |
Transient failure (timeout, rate limit) — retry in expires_in seconds |
block |
Hard failure detected — do not execute |
Get an API key at verifyproceed.com/get-api-key. 100 calls/month. No card. No expiry.
Agents pay $0.01 USDC on Base per call, autonomously, via the x402 protocol. No accounts. No billing portals. Machine-native payments for machine-native infrastructure.
POST /v1/acp/guard (no key)
← HTTP 402 + payment challenge
→ Agent pays $0.01 USDC on Base
→ Retry with X-PAYMENT header
← HTTP 200 + verdict
| Framework | Integration |
|---|---|
| Coinbase ACP | Native — ACP endpoints (/v1/acp/*) |
| ElizaOS / ai16z | Plugin (see example above) |
| LangChain | Tool (see example above) |
| Solana Agent Kit | HTTP call before any action |
| Any HTTP client | curl, requests, fetch, axios |
- Python 3.11+
- OpenRouter API key (for LLM verdicts)
- Optional: CoinGecko Demo API key (higher rate limits)
git clone https://github.com/verifyproceed/verifyproceed.git
cd verifyproceed
pip install -r requirements.txt
cp .env.example .env
# Edit .env with your keys
uvicorn app:app --reload --port 8000
| Variable | Required | Description |
|---|---|---|
OPENROUTER_API_KEY |
Yes | LLM verdict generation |
SUPABASE_URL |
Yes | API key validation |
SUPABASE_SERVICE_KEY |
Yes | Supabase service role key |
COINGECKO_API_KEY |
Recommended | Higher rate limits on price checks |
PAYMENT_WALLET |
Yes | USDC payment recipient address |
OPENROUTER_MODEL |
No | Default: openai/gpt-4o-mini |
API_KEY |
No | Global key for private endpoints |
docker build -t verifyproceed-guard .
docker run -p 8000:8000 --env-file .env verifyproceed-guard
| Resource | Link |
|---|---|
| Full documentation | verifyproceed.com/docs |
| Interactive playground | verifyproceed.com/playground |
| OpenAPI spec | verifyproceed.com/openapi.json |
| Postman collection | verifyproceed.com/postman_collection.json |
| Get API key | verifyproceed.com/get-api-key |
- Email: api@verifyproceed.com
- Website: verifyproceed.com
- X / Twitter: @verifyproceed
MIT