AgentPay Pre-Trade Risk Check
POST agentpay.tools/tools/pre_trade_check/call
Why an agent can trust this route.
Sonar evidence is advisory. Paid delivery is shown as verified only when paid probes are available; otherwise route estimates use the unpaid handshake as a clearly labeled proxy.
Observed outcomes
Pre-trade risk check for AI agents trading crypto: live orderbook slippage at YOUR size, side-aware funding carry, open-interest crowding, and optional contract security — composed into a single ok/caution/avoid verdict with per-factor reasons and raw data embedded. Answers 'is this trade sane?' before trading, not after. Replaces four API integrations plus the judgment layer.
Resource: agentpay.tools/tools/pre_trade_check/call
Network: eip155:8453 · Asset: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 · Pay to: 0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7
Payment methods: eip3009 · Last validation: —
{
"input": {
"body": {
"parameters": {
"side": "long",
"symbol": "ETH",
"size_usd": 50000
}
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"side": "long",
"symbol": "ETH",
"factors": {
"carry": {
"level": "ok",
"reason": "carry unremarkable",
"median_funding_pct": 0.01
},
"crowding": {
"level": "ok",
"reason": "positioning unremarkable",
"long_short_ratio": 1.2
},
"security": {
"level": "skipped",
"reason": "no token_address provided"
},
"liquidity": {
"level": "ok",
"reason": "fills within 0.001% of best price",
"slippage_pct": 0.001
}
},
"verdict": "ok",
"size_usd": 50000
}
},
"paymentRequirements": [
{
"raw": {
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2",
"assetTransferMethod": "eip3009"
},
"payTo": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"amount": "10000",
"scheme": "exact",
"network": "eip155:8453",
"mimeType": "application/json",
"resource": "https://agentpay.tools/tools/pre_trade_check/call",
"description": "AgentPay tool call",
"outputSchema": {
"input": {
"type": "object",
"required": [
"symbol"
],
"properties": {
"side": {
"enum": [
"long",
"short"
],
"type": "string",
"default": "long",
"description": "Trade direction (funding carry is side-aware)"
},
"symbol": {
"type": "string",
"description": "Asset to check, e.g. 'ETH', 'BTC', 'SOL'"
},
"size_usd": {
"type": "number",
"default": 10000,
"description": "Intended position size in USD (drives the slippage check)"
},
"token_address": {
"type": "string",
"description": "Optional ERC-20 contract address for the GoPlus security scan. Auto-resolved for major tokens; required for a full verdict on tokens the resolver doesn't know (otherwise security reads 'unknown' and caps the verdict at caution)"
}
}
},
"errors": [
{
"body": {
"error": "<summary>",
"reason": "<machine-readable reason>"
},
"when": "No payment attached (this challenge), or the attached payment failed verification: wrong amount/recipient, memo mismatch, expired, or already used (replay)",
"retry": "Re-request the challenge and pay again",
"status": 402
},
{
"body": {
"detail": [
{
"loc": [
"body"
],
"msg": "<what is wrong>",
"type": "<error type>"
}
]
},
"when": "Request body present but malformed (invalid JSON or wrong field types) WITH a payment header attached — checked BEFORE settlement, so the payment is never consumed. An unpaid malformed request gets the 402, not a 422",
"retry": "Fix the body and retry with a fresh payment",
"status": 422
},
{
"body": {
"detail": "Tool '<name>' not found"
},
"when": "Unknown tool name",
"status": 404
},
{
"body": {
"error": "Rate limit exceeded"
},
"when": "Rate limited (per-IP and per-wallet limits)",
"retry": "Back off and retry after a minute",
"status": 429
},
{
"body": {
"tool": "<name>",
"error": "Tool execution failed",
"payment_status": "refund_pending"
},
"when": "Payment settled on-chain but tool execution failed — the payment is marked refund_pending automatically; you are not charged for a failed call",
"status": 502
},
{
"body": {
"detail": "<what is unavailable>"
},
"when": "Tool temporarily unavailable, or the gateway cannot persist the challenge (fail-closed)",
"retry": "Retry shortly",
"status": 503
}
],
"output": {
"side": "long",
"symbol": "ETH",
"factors": {
"carry": {
"level": "caution",
"reason": "longs paying elevated funding",
"annualized_pct": 67.9,
"median_funding_pct": 0.062
},
"crowding": {
"level": "ok",
"reason": "positioning unremarkable",
"long_short_ratio": 1.4,
"oi_change_24h_pct": 3.2
},
"security": {
"level": "skipped",
"reason": "no token_address provided"
},
"liquidity": {
"level": "ok",
"reason": "fills within 0.011% of best ask",
"bucket_usd": 50000,
"slippage_pct": 0.011
}
},
"verdict": "caution",
"size_usd": 50000
}
},
"maxTimeoutSeconds": 300
},
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"scheme": "exact",
"network": "eip155:8453",
"amountAtomic": "10000"
}
]
}Source catalog records are retained separately from live endpoint observations. Sonar score, uptime, and latency are advisory metrics. CDP indexing is not inferred from validation.