Solidity security reports your agent can buy in one HTTP call.
Send a verified Base contract address or raw Solidity source. Get a signed JSON report: findings by severity, a risk rating, and a map of what the owner can do. You aren't charged if the code won't compile.
Quick scan
- Slither high and medium detectors
- Risk rating: LOW / MEDIUM / HIGH
- Ed25519-signed report plus a receipt bound to the payment
- About 1 second for typical contracts
Deep review
- Every Slither detector, including low and informational
- Owner-power map: mint, blacklist, pause, upgrade, fees, sweep
- Proxy and upgradeability detection
- Known false positives marked and kept out of the rating
Call it
Any x402 v2 client works. An unpaid request returns 402 with a payment-required header (scheme exact, network eip155:8453, USDC). Sign it and retry with payment-signature.
The payment authorization is verified, the analysis runs in an isolated sandbox, and settlement is attempted only after a signed report exists. Invalid input (400) or failed analysis (422) is never settled and says charged:false. The report is released only when the USDC transfer is proven on Base. If settlement is still unconfirmed, you get 202 SETTLEMENT_PENDING: resend the identical request to collect the report once it confirms, or a 402 charged:false if it never does. One authorization buys exactly one report and is never charged twice.
Input is {"address","chain_id"} for a Sourcify-verified contract, {"source"} for one file, or {"sources":{path:src},"target"} for several.
curl -i -X POST https://omni-audit.pplx.app/port/5000/v1/contract-audit/quick \
-H 'content-type: application/json' \
-d '{"address":"0x4200000000000000000000000000000000000006","chain_id":8453}'
# → 402 payment-required (1000000 = 1.00 USDC)
# with an x402 client, e.g. @x402/fetch:
const res = await fetchWithPayment(URL, {
method: "POST", headers: {"content-type":"application/json"},
body: JSON.stringify({ source: soliditySource })
});| Endpoint | Price | Notes |
|---|---|---|
| GET /port/5000/v1/contract-audit | free | Prices, input schema, signing key |
| GET /port/5000/v1/contract-audit/sample | free | A real deep report on WETH9 (Base) |
| GET /port/5000/.well-known/omni-audit-key | free | Ed25519 JWK for checking signatures with the standalone verify-report.mjs |
| POST …/quick | 1.00 USDC | 1000000 atomic |
| POST …/deep | 25.00 USDC | 25000000 atomic |
Benchmark
Run before launch against contracts with known bugs and contracts with none. Every test contract and test is in the published source.
| Case | Expected | Result |
|---|---|---|
| Reentrancy, tx.origin auth, unprotected selfdestruct, unchecked call, arbitrary ETH send, controlled delegatecall, uninitialized storage | 7 bugs | 7 / 7 detected |
| Safe bank, plain ERC-20, counter | no high/medium | 0 / 3 falsely flagged |
| USDC implementation on Base (23 files) | admin controls | mint, blacklist, pause, rescue mapped |
| USDC proxy | proxy pattern, not a bug | 4 proxy false positives marked, rating LOW |
Signing key fingerprint: urn:omni:sirfixall:audit-key:6eb59bd293c7a003
Sample report
A live deep-tier report on WETH9, the wrapped ETH contract on Base, fetched from the service:
Loading…
Limits
This is automated static analysis using Slither (Trail of Bits, open source) plus OMNI's owner-power mapping. It is not a comprehensive independent security audit or a manual review, and it can't prove code is safe. Economic, oracle, cross-contract and most business-logic flaws are out of scope. Nothing is executed on-chain. Only public source is fetched (Sourcify), and no transactions are sent.