Plexa /v1/pretrade/check — pre-trade token safety check on Base: can you still sell thi…
Plexa /v1/pretrade/check — pre-trade token safety check on Base: can you still sell this token? avoid fires only on a trap proven on-chain now: no pool to exit into, an exit pot under 5% of your size, or the trading gate off (the honeypot shape). A drained po…
by api.getplexa.com · discovered, not yet claimed by its owner · updated 2026-10-08
Mirrored from Coinbase's public x402 Bazaar. The description is the provider's own text and has not been reviewed here; the payment requirements are copied as published.
What it does
Plexa /v1/pretrade/check — pre-trade token safety check on Base: can you still sell this token? avoid fires only on a trap proven on-chain now: no pool to exit into, an exit pot under 5% of your size, or the trading gate off (the honeypot shape). A drained pot is what a rug leaves behind — measured, not predicted. clear = no provable trap, NOT safe. Alias: same engine and price as /v1/pretrade/check.
Tags: bazaar · builder-code
Call contract
- Method
- POST
- Input
- json
- Output
- json
- Last paid call
- 2026-10-08
{
"sizeUSD": "1000",
"token": "0xE014d2A4da6E450f21b5050120D291e63c8940FD"
}{
"confidence": "low",
"coverage": {
"axesExpected": 5,
"axesReporting": 4
},
"liquidityCoverage": {
"asOfBlock": 51728987,
"asOfBlockFirst": 51728985,
"conclusive": true,
"factoriesChecked": 13,
"poolsFound": 8,
"singletonPoolsCounted": 7,
"singletonPoolsHooked": 1,
"singletonPoolsRejected": 22,
"singletonPoolsSeen": 31,
"singletonScanTruncated": true,
"unmeasuredVenueNames": [],
"unmeasuredVenues": 0,
"venuesUnread": 0
},
"market": {
"holderCount": 31524,
"marketCapUsd": 2018589,
"priceUsdSpot": 0.000561,
"volume24hUsd": 75517.39
},
"quote": {
"confidence": "low",
"depthAtSize": 1763662.4571789096,
"direction": "buy",
"executablePrice": 1763.6624571789096
},
"reasons": [
"no provable trap detected. This is NOT a safety rating: it means none of the checks that can PROVE a trap (NO_EXIT_VENUE, EXIT_LIQUIDITY_DRAINED, TRADING_DISABLED) fired at this block, AND the liquidity sweep reached a conclusion (liquidityCoverage.conclusive). Structural risk — age, holder concentration, liquidity depth, transfer restrictions — is reported in risk_profile and can still be severe",
"hook-refused-quote — a Uniswap v4 pool whose hook has swap permissions rejected our quoter's simulation of the sale (a third-party quote), so that sale was not measured this call; no sale through that pool was observed in blocks 51426586–51728985, at most 7 days — see observedExit",
"not checked: independent price cross-check (a Chainlink feed, or a second venue pricing the same pair) — no Chainlink feed and no on-chain price on the 12 priced venue(s) of base. Reported as unknown, never as clean; confidence reduced accordingly",
"route-search-skipped:direct-exit-sufficient — the first hop already cleared the floor, so we did NOT enumerate exotic roads for this token: a better road may exist and was not looked for"
],
"risk_profile": {
"age": {
"ageDays": 455.03,
"genesisBlock": 32071499
},
"concentration": {
"ageSec": null,
"poolsExclusion": "applied",
"source": "graph",
"stale": false,
"top10Bound": "lower",
"top10SharePct": 88.0185,
"top10SharePctInclPools": 90.0863,
"top1SharePct": 64.0204
},
"liquidity": {
"exitLiquidityUsd": 977.2,
"exitPoolInventoryUsd": 116037.32,
"exitPotBasis": "position-sale",
"poolCount": 8,
"venueCount": 1
},
"oracle": {
"deviationBps": null,
"source": null
},
"transferability": {
"fingerprints": "none",
"hasBlacklist": false,
"tradingEnabled": null
}
},
"sources": {
"*": "measured",
"market": "vendor:dexscreener+goplus",
"market.holderCount": "vendor:goplus",
"risk_profile.concentration": "vendor:graph"
},
"triggers": [],
"ts": 1790247323121,
"validUntil": 1790247326121,
"verdict": "clear"
}Use with an agent
- Discover. Agents find this listing with
GET https://bazaar.saylorinnovations.com/discovery/search?query=…, the MCP toolsearch_resources, or/discovery/resources. - Inspect. Fetch
/resources/32512.jsonfor the price and payment options. - Pay. Call
GET https://api.getplexa.com/v1/rug-check. The provider answers402with its payment requirements. An x402 client signs one of the options below and retries withPAYMENT-SIGNATURE. - Execute. The provider returns
200with the data. Agent Bazaar is not in the request path and never sees your payment.
For humans
You don't need an account or an API key; you need a wallet holding a small amount of USDC on Base, Polygon, Arbitrum One, Solana, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- $0.05 / request
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base, Polygon, Arbitrum One, Solana
- Demand
- 2 calls · 2 unique payers in 30d (public x402 Bazaar data)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base eip155:8453 | USDC | $0.05 | 0xd993eAfBA87cFfa2ca2CFF5A56EF89034575A7ef | 300s |
| exact | Polygon eip155:137 | USDC | $0.05 | 0xd993eAfBA87cFfa2ca2CFF5A56EF89034575A7ef | 300s |
| exact | Arbitrum One eip155:42161 | USDC | $0.05 | 0xd993eAfBA87cFfa2ca2CFF5A56EF89034575A7ef | 300s |
| exact | Solana solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp | USDC | $0.05 | D6FqEyoFvkgGy4PpJjckHc3xRXhzL6mWQ25gz4rkVLor | 300s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xd993eAfBA87cFfa2ca2CFF5A56EF89034575A7ef",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "50000",
"amountUsd": 0.05,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:137",
"payTo": "0xd993eAfBA87cFfa2ca2CFF5A56EF89034575A7ef",
"asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"amount": "50000",
"amountUsd": 0.05,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "eip155:42161",
"payTo": "0xd993eAfBA87cFfa2ca2CFF5A56EF89034575A7ef",
"asset": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"amount": "50000",
"amountUsd": 0.05,
"maxTimeoutSeconds": 300
},
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "D6FqEyoFvkgGy4PpJjckHc3xRXhzL6mWQ25gz4rkVLor",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "50000",
"amountUsd": 0.05,
"maxTimeoutSeconds": 300
}
]Schemas
Output schema (JSON Schema)
{
"properties": {
"example": {
"properties": {
"confidence": {
"description": "high | medium | low. On \"avoid\" this is confidence IN THE TRIGGER, which is a measurement taken this call, so it is always \"high\" — a check that failed elsewhere does not make the measured trap less true. On \"clear\" it is how COMPLETE the checks were: fewer axes computed, lower confidence. On \"unknown\" it is capped at \"low\" by construction: the check the verdict depends on did not finish, so a high number there would contradict the verdict word next to it. Either way the gaps are reported explicitly — see `reasons` and the null fields in `risk_profile`.",
"type": "string"
},
"quote": {
"description": "Executable quote sub-result (realizable fill under size, not mid/spot)",
"type": "object"
},
"reasons": {
"description": "Human-readable reasons behind the verdict",
"items": {
"type": "string"
},
"type": "array"
},
"risk_profile": {
"description": "Structural risk as measured DATA (age, concentration, liquidity incl. exitLiquidityUsd, oracle availability, transfer restrictions), each section with a plain-language note. Never a severity: these factors do not separate live from dead tokens [M, n=40].",
"type": "object"
},
"triggers": {
"description": "Proven traps that fired — CLOSED list (NO_EXIT_VENUE, EXIT_LIQUIDITY_DRAINED, TRADING_DISABLED), empty when verdict is \"clear\".",
"items": {
"type": "string"
},
"type": "array"
},
"verdict": {
"description": "avoid | clear | unknown. \"avoid\" = a listed trap was PROVEN at this block (see `triggers`); \"clear\" = none of them fired AND the liquidity sweep reached a conclusion; \"unknown\" = none fired but the sweep did NOT reach a conclusion (`liquidityCoverage.conclusive: false`), so absence of a trap is not established — see the `exit-coverage-incomplete:<what>` line in `reasons`. \"clear\" is NOT a safety rating and NOT a prediction — structural risk lives in `risk_profile`. verdict semantics changed 2026-08-01 (v2): avoid = provable trap only; ok/caution are gone. 2026-08-27 (P67): a THIRD value \"unknown\" was added — it takes over the cases that used to answer \"clear\" while `liquidityCoverage.conclusive` was false. No existing value changed meaning; code branching on \"avoid\" is unaffected, and code branching on \"clear\" now gets strictly fewer, better-founded clears. 2026-09-21 (P96): a clear verdict now also requires the MEASURED sale of your position to return at least 90% of the size you asked about. Below that the answer is \"unknown\" with the reason exit-below-90pct — no trap was proven, but the exit we measured is not there at this size. Again strictly fewer clears; avoid is untouched.",
"type": "string"
}
},
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}Example shape — generated from the schema, not a captured live response
{
"example": {
"confidence": "string",
"quote": {},
"reasons": [
"string"
],
"risk_profile": {},
"triggers": [
"string"
],
"verdict": "string"
},
"type": "string"
}Examples
curl "https://api.getplexa.com/v1/rug-check"
# -> 402 Payment Required, accepts[] lists how to pay
# retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paidconst res = await fetch("https://api.getplexa.com/v1/rug-check");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}import httpx
res = httpx.get("https://api.getplexa.com/v1/rug-check")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- api.getplexa.com
- Endpoint
- https://api.getplexa.com/v1/rug-check
- Machine-readable
/resources/32512.json